Я перепробовал полдюжины различных подходов, но не могу изменить значение тайм-аута по умолчанию для запроса актера. Это означает, что он почти всегда дает сбой на сервере 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/test/resources/test-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 секунда — это слишком быстро, я был бы очень счастлив.