首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ScalikeJDBC内存测试数据库中应用演化

在ScalikeJDBC内存测试数据库中应用演化
EN

Stack Overflow用户
提问于 2019-02-16 08:45:59
回答 1查看 311关注 0票数 0

我正在使用ScalikeJDBC和Play。我想为我的Specs2测试将进化应用到内存数据库中。

代码语言:javascript
复制
import org.specs2.mutable.Specification
import org.specs2.specification.BeforeAfterAll
import play.api.db.{Database, Databases}
import play.api.db.evolutions.Evolutions
import scalikejdbc.ConnectionPool.DEFAULT_NAME
import scalikejdbc.{ConnectionPool, DataSourceConnectionPool}

import scalikejdbc.{AutoSession, _}

class PaymentRepoSpec extends Specification with BeforeAfterAll {

  private var database: Option[Database] = None

  def beforeAll(): Unit = {
    database = Some(Databases.inMemory(
      name = "payment-repo",
      urlOptions = Map("MODE" -> "PostgreSQL", "DATABASE_TO_UPPER" -> "FALSE"),
      config = Map()
    ))
    database.foreach(Evolutions.applyEvolutions(_))
    database.foreach(db => ConnectionPool.add(DEFAULT_NAME, new DataSourceConnectionPool(db.dataSource)))
  }

  def afterAll(): Unit = {
    database.foreach(Evolutions.cleanupEvolutions(_))
    database.foreach(_.shutdown())
  }

  "fruitcakes" should {
    "be delicious" >> {

      import scalikejdbc._

      DB.readOnly { implicit s =>
        sql"""select id from payments"""
          .map(_.int(1)).list().apply().foreach(println)
      }
      ok
    }
  }
}

这是失败的,因为进化没有被应用。

代码语言:javascript
复制
org.h2.jdbc.JdbcSQLException: Table "payments" not found; SQL statement:
select id from payments [42102-192]

application.conf包括

代码语言:javascript
复制
modules.enabled += "scalikejdbc.PlayModule"
modules.disabled += "play.api.db.DBModule"

evolutions.default/1.sql包括

代码语言:javascript
复制
CREATE TABLE payments(
    id                  SERIAL PRIMARY KEY,
    source              CHAR(56) NOT NULL,
    destination         CHAR(56) NOT NULL,
    code                VARCHAR(12) NOT NULL,
    issuer              CHAR(56),
    units               NUMERIC NOT NULL,
    received            TIMESTAMP NOT NULL,
    scheduled           TIMESTAMP NOT NULL,
    submitted           TIMESTAMP,
    status              VARCHAR(9) NOT NULL CHECK (status IN ('pending', 'submitted', 'failed', 'succeeded')),
    op_result           VARCHAR(64)
);

(这在运行应用程序时起作用)

build.sbt包括

代码语言:javascript
复制
libraryDependencies ++= Seq(
  guice, evolutions, jdbc, specs2 % Test,
  "io.github.synesso" %% "scala-stellar-sdk" % "0.5.1",
  "com.nrinaudo" %% "kantan.csv-generic" % "0.4.0",
  "com.h2database" % "h2" % "1.4.192",
  "org.postgresql" % "postgresql" % "42.2.5",
  "org.scalikejdbc" %% "scalikejdbc" % "3.3.0",
  "org.scalikejdbc" %% "scalikejdbc-config" % "3.3.0",
  "org.scalikejdbc" %% "scalikejdbc-play-initializer" % "2.6.0-scalikejdbc-3.3",
  "org.webjars.npm" % "bulma" % "0.7.2",
  "org.webjars" % "font-awesome" % "5.6.3",
  "org.specs2" %% "specs2-scalacheck" % "4.3.6" % Test
)

如何让测试运行对我的ScalikeJDBC DB的演进?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-16 22:53:54

Databases.inMemory中的参数Databases.inMemory必须与evolutions下的文件夹匹配。

例如,如果演化是在evolutions/default/*.sql中,那么必须调用Databases.inMemory(name="default", db)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54721374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档