Сценарий:
import org.scalatest.{ BeforeAndAfterAll, FeatureSpec, GivenWhenThen, Matchers }
import org.scalatest.concurrent.{ ScalaFutures, Futures }
import org.scalatest.time.{ Millis, Seconds, Span }
trait UniqueUserSpec extends FeatureSpec with GivenWhenThen with BeforeAndAfterAll with ScalaFutures {
implicit override val patienceConfig =
PatienceConfig(timeout = Span(5, Seconds), interval = Span(5, Millis))
var user: Users = _
override def beforeAll: Unit = {
this.synchronized {
user = TestHelper.createAndRegisterAUser()
}
}
}
В методе TestHelper.createAndRegisterAUser()
все действия блокирующие и синхронные, от создания до записи БД и т.д.
В настоящее время:
class SomeActualTests extends UniqueUserSpec {
feature("Something is possible") {
scenario("some conditions") {
Given("an api call is made to etc..")
val req = url(API_END_POINT) / "route" <<? Map("test", "test")
whenReady(req.POST) {
response => {
Then("The response status should be 200")
response.getStatusCode shouldEqual 200
}
}
}
}
}
Проблема: поведение beforeAll
ненадежно, несколько тестов завершились неудачно, потому что он не выполнялся перед всеми тестами.
Если я создам отдельный user
внутри каждого сценария, все будет работать. Если я попытаюсь использовать тот, который должен был создать beforeAll
, объект не был записан в БД.
Что я делаю неправильно с параллелизмом, если что?
Есть ли лучший способ сделать что-то «до всех тестов» в Feature?