带有回滚的光滑3会话

时间:2016-03-25 18:09:37

标签: scala transactions slick

我正在使用slick 3并且我尝试使用一些插入执行一些集成测试,一些使用db的代码然后我想在测试结束时回滚所有插入或删除但我找不到任何关于它的文档。

有可能吗? 我怎样才能实现它?

2 个答案:

答案 0 :(得分:2)

您需要在. transactionally

周围使用DBIOAction

例如

val a = (for {
  ns <- coffees.filter(_.name.startsWith("ESPRESSO")).map(_.name).result
  _ <- DBIO.seq(ns.map(n => coffees.filter(_.name === n).delete): _*)
} yield ()).transactionally

val f: Future[Unit] = db.run(a)

了解更多信息 http://slick.typesafe.com/doc/3.1.1/dbio.html#transactions-and-pinned-sessions

答案 1 :(得分:1)

我可以建议在使用BeforeAndAfter scala-test trait测试之前和之后使用下一个代码删除并创建表模式:

def createTable(): Future[Unit] = {
        db.run(DBIO.seq(
          MTable.getTables.map(tables =>
            if (!tables.exists(_.name.name == table.baseTableRow.tableName))
              db.run(table.schema.create)
          )
        ))
}

def dropTable(): Future[Unit] = db.run(table.schema.drop)