2016-03-21 20 views
1

Aşağıdaki senaryoyu hayal edin: Sipariş edilen bölümlerden oluşan bir kitabınız var.H2 veritabanında slick ve scalatest ile benzersiz anahtar kısıtlaması sağlayın

İlk testi:

"Chapters" should "have a unique order" in 
{ 
    // val exception = intercept 
    db.run(
     DBIO.seq 
     (
     Chapters.add(0, 0, "Chapter #0"), 
     Chapters.add(0, 0, "Chapter #1") 
    ) 
    ) 
} 

Şimdi uygulama:

case class Chapter(id: Option[Long] = None, bookId: Long, order: Long, val title: String) extends Model 

class Chapters(tag: Tag) extends Table[Chapter](tag, "chapters") 
{ 
    def id = column[Option[Long]]("id", O.PrimaryKey, O.AutoInc) 
    def bookId = column[Long]("book_id") 
    def order = column[Long]("order") 
    def title = column[String]("title") 

    def * = (id, bookId, order, title) <> (Chapter.tupled, Chapter.unapply) 
    def uniqueOrder = index("order_chapters", (bookId, order), unique = true) 

    def bookFK = foreignKey("book_fk", bookId, Books.all)(_.id.get, onUpdate = ForeignKeyAction.Cascade, onDelete = ForeignKeyAction.Restrict) 
} 

Belki 2 sütunlarda böyle eşsiz-kısıtlaması h2 bile mümkün değil mi? Neyse

:

Beklenti: bir istisnası Sonra eşsiz-kısıtlamayı ihlal ettiği için, şimdi, benim testinde bekliyoruz/dolayısıyla başarısız testi araya girmesinden atılmasına.

Gerçek sonucu: Başarılı bir test :(

düzenlemek: Ayrıca, bundan kullanın:.

implicit val defaultPatience = PatienceConfig(timeout = Span(30, Seconds), interval = Span(100, Millis))

+0

Oluşturulan şemayı göremiyor musunuz? Tablo tanımını h2'nin kendisinde kontrol edin – nmat

cevap

2

db.run bir Future döndürür Üzerinde Await zorunda yürütme sonucunu elde etmek için Bunu deneyin:

import scala.concurrent.duration._ 
val future = db.run(...) 
Await.result(future, 5 seconds) 
+0

Muhtemelen bundan bahsetmeliydim: örtük val varsayılanPatience = PatienceConfig (timeout = Span (30, Saniye), interval = Span (100, Millis)) – Sorona

+1

Nasıl görmedim – Dima

+0

için hiç önemli değil Testlerimde asla beklemedim ve her zaman varsayılan bir sabır. http://www.artima.com/docs-scalatest-2.0.M5/org/scalatest/concurrent/PatienceConfiguration.html – Sorona