2016-03-25 6 views
9

Ich benutze Slick 3 und ich versuche, einige Integration Tests mit einigen Einfügungen durchzuführen, einige Code, der die db verwendet und dann möchte ich alle einfügen oder löschen am Ende des Tests selbst aber ich kann keine Dokumentation darüber finden.Slick 3 Sitzung mit Rollback

Ist es möglich? Wie kann ich es erreichen?

+1

Siehe hier: http://stackoverflow.com/questions/34905455/how-can-i-roll-back-an-integration-test-with-slick-3-specs2 Werfen Sie auch einen Blick auf diese Diskussion. Sie diskutieren das selbe issye, dem Sie gegenüberstehen. –

+0

Hast du Hilfe bekommen? –

+0

Ja, es scheint die beste Antwort, die ich bekommen habe. Leider scheint Slick eine großartige Bibliothek zu sein, aber für einige Funktionen unvollständig. – Matroska

Antwort

1

Ich rate kann Tabellenschema vor und nach dem Test mit BeforeAndAfter scala-Test Zug mit dem nächsten Code zu löschen und erstellen:

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

Dies oder alternativ, wenn Sie bereits die db present und kann die Tabellen nicht löschen Sie müssen die eingefügten Zeilen verfolgen und sie auf die gleiche Weise löschen –

2

Sie müssen verwenden . transactionally um die DBIOAction

zB

Für mehr siehe http://slick.typesafe.com/doc/3.1.1/dbio.html#transactions-and-pinned-sessions

+4

Dies ist nicht korrekt, wird transaktional ein Rollback bereitstellen, wenn alles innerhalb der DBIOAction fehlschlägt, aber dies wird keine Rollback-Funktion zur Verfügung stellen nachdem die Integrationstests abgeschlossen sind. –

+0

@LaurenceBird es ist richtig, was Sie tun müssen, ist alles in DBIOs und die letzte Aktion sollte ein DBIO.failed sein – nafg

+0

@Nafg - können Sie ein Beispiel dafür als Antwort geben? – Malvolio