2016-03-25 15 views
9

Slick 3 kullanıyorum ve bazı eklentilerle bazı entegrasyon testleri gerçekleştirmeye çalışıyorum, db kullanan bazı kodlar ve sonra testin sonunda tüm ekleme veya silme işlemlerini geri almak istiyorum ancak bu konuda herhangi bir belge bulamıyorum.Geri alma ile Slick 3 oturumu

Mümkün mü? Bunu nasıl başarabilirim?

Ben bırakıp sonraki kodla BeforeAndAfter Scala-testi özelliği kullanmadan önce ve testten sonra tablo şema oluşturmak için tavsiye edebilir
+1

Bak: http://stackoverflow.com/questions/34905455/how-can-i-roll-back-an-integration-test-with-slick-3-specs2 Ayrıca bu tartışmaya da göz atın. Karşı karşıya olduğun aynı şeyleri tartışıyorlar. –

+0

Herhangi bir yardım aldınız mı? –

+0

Evet, aldığım en iyi cevap görünüyor. Maalesef, kayganlığın harika bir kütüphane olduğu ancak bazı özellikler için eksik olduğu anlaşılıyor. – Matroska

cevap

1

: Sen DBIOAction

örn etrafında . transactionally kullanmak gerekir

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

Bu, veya alternatif olarak zaten varsa db mevcut ve eklenen satırları takip etmek ve aynı şekilde onları silmek zorunda olacak tabloları bırakamazsınız –

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) 

Daha fazla bilgi için bkz: http://slick.typesafe.com/doc/3.1.1/dbio.html#transactions-and-pinned-sessions

+4

Bu doğru değil, DBIOAction içindeki herhangi bir şey başarısız olduğunda, geri alma işlemi geri dönüş sağlar, ancak bu geri alma özelliği sağlamaz entegrasyon testleri bittikten sonra. –

+0

@LaurenceBird, yapmanız gereken, DBIO'lar içindeki her şeyi çalıştırmaktır ve son eylem bir DBIO.failed – nafg

+0

@ nafg olmalıdır - bunun bir cevabı olarak bir örnek verebilir misiniz? – Malvolio