Изменение времени ожидания запроса в тестовом наборе akka

Я пробовал полдюжины разных подходов, но я не могу изменить значение тайм-аута по умолчанию для запроса актера. Это означает, что почти всегда происходит сбой на сервере CI.

Вот моя текущая итерация. Есть несколько попыток, связанных вместе. Никто из них не делает ничего, чтобы изменить значение тайм-аута от 1 секунды.

базовый тестовый класс

import akka.actor.ActorSystem
import akka.testkit.TestKit
import com.typesafe.config.ConfigFactory
import org.specs2.mutable.SpecificationLike
import org.specs2.specification.AfterEach
import org.specs2.specification.core.Fragments

abstract class TestActors
    extends TestKit(ActorSystem("testsystem", ConfigFactory.load("test-application.conf")))
    with SpecificationLike
    with AfterEach {
  override def map(fs: => Fragments) = super.map(fs) ^ step(system.terminate, global = true)
  def after = system.terminate()
}

спекуляция

class RepoSpec(implicit ee: ExecutionEnv) extends TestActors {
  isolated

  implicit val timeout = Timeout(5 seconds)

  val repo = system.actorOf(Props(classOf[Repo], data))

  "return None when there's no such record" >> {
    implicit val timeout = Timeout(30 seconds)
    val record = repo ? GetRecord(1, RecordKey(1, 1, 1))
    record must beEqualTo(Option.empty[Record]).await
  }
}

SRC / тест / ресурсы / тест-application.conf

akka.test {
  timefactor=10
  single-expect-default=5000
}

Спецификации на моем ноутбуке завершены, но на Трэвисе сбои:

[error] x return None when there's no such record
[error]  Timeout after 1 second (retries = 0, timeout = 1 second), timeFactor = 1 (TestActors.scala:10)

Редактировать: странно, что строка, указанная в сообщении об ошибке, TestActors.scala:10 - это определение класса базового тестового класса.

Если бы я мог заставить систему понять, что 1 секунда слишком быстра, я был бы очень счастлив.

1 ответ

Решение

Вы можете переопределить timeout установка на что-то большее, чем одна секунда:

record must beEqualTo(Option.empty[Record]).await(timeout = 5.seconds)

Тем не менее, рекомендуемая практика заключается в timeFactor Аргумент среды выполнения в specs2 при запуске ваших тестов на CI-сервере. Настройки ожидания ожидания умножаются на timeFactor, чье значение по умолчанию равно единице. В вашем тесте timeout имеет значение в одну секунду, и timeFactor один, что приводит к общему времени ожидания в одну секунду: 1 second * 1, + Изменить timeFactor в зависимости от вашего CI-сервера.

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