저는 Scala Play 2.2.2 응용 프로그램을 가지고 있으며 사양 테스트의 일부로 테스트를 위해 가급적 json 형식으로 일부 고정물 데이터를 삽입하고 싶습니다. 테스트를 위해 일반적인 메모리 내 H2 데이터베이스를 사용합니다. 어떻게하면 되나요? 나는 모든 문서를 검색했지만 이것에 대한 언급은 어디에도 없습니다.
나는 Global을 통해 조명기 구현의 나만의 풍미를 구축하는 것을 선호하지 않습니다. 이 권리에 해킹이 아닌 방법이 있어야합니까?
AFAIK는이를 수행 할 내장 된 기능이 없습니다. 레일스입니다. Play Scala가 지속성을 처리해야하는 방식에 대해 훨씬 더 많은 의견을 제시하지 않고 개발자가 무엇을 할 수 있는지 상상하기 어렵습니다 (개인적으로는 부정적인 것으로 간주합니다).
또한 테스트를 위해 H2를 사용하고 리소스 파일에 일반 SQL 픽스처를 사용하고 몇 가지 (상당히 간단한) 도우미를 사용하여 테스트 전에로드합니다.
package object helpers {
import java.io.File
import java.sql.CallableStatement
import org.specs2.execute.{Result, AsResult}
import org.specs2.mutable.Around
import org.specs2.specification.Scope
import play.api.db.DB
import play.api.test.FakeApplication
import play.api.test.Helpers._
/**
* Load a file containing SQL statements into the DB.
*/
private def loadSqlResource(resource: String)(implicit app: FakeApplication) = DB.withConnection { conn =>
val file = new File(getClass.getClassLoader.getResource(resource).toURI)
val path = file.getAbsolutePath
val statement: CallableStatement = conn.prepareCall(s"RUNSCRIPT FROM '$path'")
statement.execute()
conn.commit()
}
/**
* Run a spec after loading the given resource name as SQL fixtures.
*/
abstract class WithSqlFixtures(val resource: String, val app: FakeApplication = FakeApplication()) extends Around with Scope {
implicit def implicitApp = app
override def around[T: AsResult](t: => T): Result = {
running(app) {
loadSqlResource(resource)
AsResult.effectively(t)
}
}
}
}
그런 다음 실제 사양에서 다음과 같이 할 수 있습니다.
package models
import helpers.WithSqlFixtures
import play.api.test.PlaySpecification
class MyModelSpec extends PlaySpecification {
"My model" should {
"locate items correctly" in new WithSqlFixtures("model-fixtures.sql") {
MyModel.findAll().size must beGreaterThan(0)
}
}
}
참고 :이 specs2 항목은 아마도 더 좋을 수 있습니다.
분명히 JSON이 정말로 필요한 경우 모델을 역 직렬화하고 데이터베이스에 유지하기 위해 추가 기계를 추가해야합니다 (종종 앱에서 이러한 작업을 수행하게되며이 경우 비교적 사소 할 수 있음).
또한 다음이 필요합니다.
conf/evolutions/default
FakeApplication
시작할 때 스키마를 빌드합니다.이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다