Tôi muốn chạy thử nghiệm đơn vị cho ứng dụng Play 2 Scala bằng cách sử dụng cùng một thiết lập cơ sở dữ liệu như được sử dụng trong sản xuất: Slick with Postgres. Sau đây thất bại với "java.sql.SQLException: Cố gắng để có được một kết nối từ một hồ bơi đã được tắt máy." trong bài kiểm tra thứ 2.Chơi 2.1 Kiểm tra Đơn vị Với Slick và Postgres
package controllers
import org.specs2.mutable._
import play.api.db.DB
import play.api.Play.current
import play.api.test._
import play.api.test.Helpers._
import scala.slick.driver.PostgresDriver.simple._
class BogusTest extends Specification {
def postgresDatabase(name: String = "default",
options: Map[String, String] = Map.empty): Map[String, String] =
Map(
"db.test.driver" -> "org.postgresql.Driver",
"db.test.user" -> "postgres",
"db.test.password" -> "blah",
"db.test.url" -> "jdbc:postgresql://localhost/blah"
)
def fakeApp[T](block: => T): T =
running(FakeApplication(additionalConfiguration =
postgresDatabase("test") ++ Map("evolutionplugin" -> "disabled"))) {
def database = Database.forDataSource(DB.getDataSource("test"))
database.withSession { implicit s: Session => block }
}
"Fire 1" should {
"do something" in fakeApp {
success
}
}
"Fire 2" should {
"do something else" in fakeApp {
success
}
}
}
tôi chạy thử nghiệm như thế này:
$ play -Dconfig.file=`pwd`/conf/dev.conf "test-only controllers.BogusTest"
Hai bí ẩn khác:
1) Tất cả các bài kiểm tra chạy, mặc dù tôi yêu cầu chỉ BogusTest để chạy
2) application.conf luôn được sử dụng, không phải def.conf, và thông tin trình điều khiển đến từ application.conf, không phải thông tin được cấu hình trong mã.
Xem http://stackoverflow.com/questions/15399161/how-do-i-specify-a-config-file-with-sbt-0-12-2-for-sbt-test để biết thông tin về cách chỉ định tập tin cấu hình khác với 'test'. –
Xin cảm ơn, có vẻ như điều này sẽ giải quyết vấn đề bí ẩn # 2. Bạn có thể làm sáng tỏ vấn đề chính không? –
Tôi cũng đang gặp sự cố tương tự. Ngay cả khi không sử dụng đặc điểm Around từ specs2, và chỉ đơn giản là gói trong 'in {running (fakeApp) {Database.forDataSource (DB.getDataSource()) withSession {}}}' cũng đưa ra ngoại lệ này. – Meredith