2016-03-21 1 views
1

Представьте себе следующую ситуацию: у вас есть книга, состоящая из упорядоченных разделов.Утвердить уникальное ограничение ключа для базы данных h2 с помощью slick и scalatest

Сначала тест:

"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") 
    ) 
    ) 
} 

Сейчас реализация:

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) 
} 

Может быть, такое уникальное, ограничение на 2 колонки даже не представляется возможным в h2?

В любом случае:

Expectation: Исключения быть выброшено, что я могу затем перехватить/ожидать в моем тесте, следовательно, неудовлетворительный тест на данный момент, за нарушение Уникально ограничений.

Фактический результат: Успешный тест :(

редактировать: Кроме того, я использую это:.

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

+0

Вы не видите сгенерированную схему? Проверьте определение таблицы внутри самого h2 – nmat

ответ

2

db.run возвращает Future Вы должны Await на него чтобы получить результат выполнения. Попробуйте следующее:

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

Возможно, я должен был упомянуть об этом: 'implicit val defaultPatience = PatienceConfig (timeout = Span (30, Seconds), interval = Span (100, Millis))' – Sorona

+1

Я не вижу, как это важно для чего-то – Dima

+0

Я никогда не ждал в своих тестах и ​​всегда терпения по умолчанию. http://www.artima.com/docs-scalatest-2.0.M5/org/scalatest/concurrent/PatienceConfiguration.html – Sorona

 Смежные вопросы

  • Нет связанных вопросов^_^