Асинхронное утверждение не запускается в
Я пытаюсь написать тест, который просто проверяет, правильно ли настроена база данных, но утверждение никогда не срабатывает, и все успешно завершается (даже если оно не будет выполнено):
import anorm._
import org.scalatestplus.play._
import play.api.db.DB
class Housekeeping extends PlaySpec with OneServerPerSuite {
// Make sure the test database is loaded
"test connection to test database" in {
DB.withConnection { implicit connection =>
SQL("SELECT * FROM accounts WHERE ID = 1").withResult(res => {
val row = res.head.row
val name = row.asMap("accounts.name")
println(name) // Prints to console
name mustEqual "this should fail"
println("HERE") // Never prints to console
})
}
}
}
Приставка:
[info] Housekeeping:
[info] - application - Creating Pool for datasource 'default'
tyler
[info] - test connection to test database
[info] - application - Shutting down connection pool.
Я не уверен, почему ничего не происходит, так как я получаю имя хорошо из базы данных. Я не смог найти никакой документации о выполнении асинхронных тестов, что, я думаю, может быть частью проблемы.
1 ответ
Нечто подобное может помочь:
import org.scalatest._
import concurrent.AsyncAssertions
import anorm._
import org.scalatestplus.play._
import play.api.db.DB
class Housekeeping extends PlaySpec with OneServerPerSuite with AsyncAssertions {
// Make sure the test database is loaded
"test connection to test database" in {
val w = new Waiter
DB.withConnection { implicit connection =>
SQL("SELECT * FROM accounts WHERE ID = 1").withResult(res => {
val row = res.head.row
val name = row.asMap("accounts.name")
println(name) // Prints to console
w { name mustEqual "this should fail" }
w.dismiss()
println("HERE")
})
}
w.await()
}
}
Ваша проблема заключалась в том, что самое масштабное не получило исключение, инициированное mustEqual
как это было брошено асинхронно.
Практически Waiter
это своего рода обертка вокруг Promise
(так что вы должны сделать dismiss()
чтобы завершить это) и w.await()
просто ждет его и перенаправляет исключение из w{...}
в тему самого лучшего