Привет, вначале я хотел бы извиниться за свой английский :)
akka = 2.3.6
spray = 1.3.2
scalatest = 2.2.1
Я столкнулся со странным поведением маршрутов teting, которые запрашивают акторов в директиве handleWith,
У меня маршрут с директивой handleWith
pathPrefix("firstPath") {
pathEnd {
get(complete("Hello from this api")) ~
post(handleWith { (data: Data) =>{ println("receiving data")
(dataCalculator ? data).collect {
case Success(_) =>
Right(Created -> "")
case throwable: MyInternalValidatationException =>
Left(BadRequest -> s"""{"${throwable.subject}" : "${throwable.cause}"}""")
}
}})
}
}
и простой субъект, который всегда отвечает при получении данных объекта и имеет собственный блок приема, заключенный в LoggingReceive, поэтому я должен видеть журналы, когда сообщение получает субъект
и я тестирую его, используя (я думаю, простой код)
class SampleStarngeTest extends WordSpec with ThisAppTestBase with OneInstancePerTest
with routeTestingSugar {
val url = "/firstPath/"
implicit val routeTestTimeout = RouteTestTimeout(5 seconds)
def postTest(data: String) = Post(url).withJson(data) ~> routes
"posting" should {
"pass" when {
"data is valid and comes from the identified user" in {
postTest(correctData.copy(createdAt = System.currentTimeMillis()).asJson) ~> check {
print(entity)
status shouldBe Created
}
}
"report is valid and comes from the anonymous" in {
postTest(correctData.copy(createdAt = System.currentTimeMillis(), adid = "anonymous").asJson) ~> check {
status shouldBe Created
}
}
}
}
}
и поведение:
Когда я запускаю все тесты в пакете (используя Intellij Idea 14 Ultimate) или тест sbt, я получаю одни и те же результаты
одно выполнение -> все тесты проходят
и следующий -> не все проходят, это не проходит, я вижу:
1. сбой, потому что запрос не был ни завершен, ни отклонен в течение X секунд (X до tp 60)
2. Вывод системной консоли из маршрута из строки post (handleWith {(data: Data) => {println ("получение данных"), поэтому код в handleWith был выполнен
3. запросить исключение тайм-аута из кода маршрута, но не всегда (среди неудачных тестов) < br /> 4. Нет журналов от субъекта LoggingReceive, поэтому у субъекта нет возможности ответить
5. Когда я повторно запускаю тесты, результаты даже отличаются от предыдущих
Есть ли проблемы с потоком? или тестовые модули, блокировка потоков внутри библиотек? или что-то еще? Понятия не имею, почему это не работает :(