Спрей и актер недетерминированные тесты

Привет, в начале я хотел бы извиниться за мой английский:)

Akka=2.3.6
распылить = 1.3.2
scalatest = 2.2.1

Я столкнулся со странным поведением маршрутов тэтинга, которое спрашивает актеров в директиве 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}"}""")
      }
    }})
  }
}


и простой субъект, который всегда отвечает, когда получает объект Data, и имеет собственный блок приема, заключенный в 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 test, я сталкиваюсь с одинаковыми результатами
одно выполнение -> все тесты пройдены
и следующий -> не все проходят, это, которые не проходят, я вижу:
1. Неудачный, потому что запрос не был ни выполнен, ни отклонен в течение Х секунд (Х до 60)
2. вывод системной консоли из маршрута от поста строки (handleWith { (data: Data) =>{ println("получение данных"), поэтому код в handleWith был выполнен
3. запрашивать исключение тайм-аута из кода маршрута, но не всегда (среди неудачных тестов)
4. нет логов от актера LoggingReceive, поэтому у актера нет шансов ответить
5. когда я запускаю тесты, результаты даже отличаются от предыдущих

Есть ли проблема с потоками? или тестовые модули, блокировка потоков внутри библиотек? или еще что? Я понятия не имею, почему это не работает:(

0 ответов

Другие вопросы по тегам