Изменение времени ожидания запроса в тестовом наборе 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-сервера.