2016-03-25 9 views
9

私はslick 3を使用していますが、いくつかのインサート、dbを使用するいくつかのコードでいくつかの統合テストを実行しようとしていて、テスト自体の最後にすべての挿入または削除をロールバックします私はそれについてのドキュメントを見つけることができません。Slick 3セッションロールバック付き

可能ですか? どうすれば実現できますか?

私がドロップすると、次のコードで BeforeAndAfter Scalaのテスト形質を使用して、試験前後のテーブルスキーマを作成するためにアドバイスすることができ
+1

ここをクリックしてください:http://stackoverflow.com/questions/34905455/how-can-i-roll-back-an-integration-test-with-slick-3-specs2また、このディスカッションをご覧ください。彼らはあなたが直面しているものと同じ話をしています。 –

+0

助けを借りましたか? –

+0

はい、それは私が得た最高の答えのようです。残念ながら、slickは素晴らしいライブラリですが、一部の機能では不完全なようです。 – Matroska

答えて

1

:あなたはDBIOAction

例えば周り. transactionallyを使用する必要が

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) 
+0

この、あるいはテーブルが削除され、挿入された行を追跡し、同じ方法で削除する必要があるテーブルを削除できない –

2

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

+4

これは正しくない、DBIOAction内の何かが失敗した場合にトランザクショナルにロールバックを提供しますが、統合テストが終了した後 –

+0

@LaurenceBirdそれは正しいです、あなたがしなければならないことは、DBIO内のすべてを実行し、最後のアクションはDBIO.failedでなければなりません。 – nafg

+0

@nafg - 答えの例を挙げてください。 – Malvolio

関連する問題