Изменение таймаута запроса в akka testkit

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


person Synesso    schedule 11.08.2017    source источник


Ответы (1)


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

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

Однако рекомендуется установить более высокую timeFactor аргумент среды выполнения в spec2 при выполнении тестов на сервере CI. Параметры ожидания ожидания умножаются на timeFactor, значение по умолчанию которого равно один. В вашем тесте timeout имеет значение в одну секунду, а timeFactor равно единице, что приводит к общему времени ожидания в одну секунду: 1 second * 1. Измените timeFactor в соответствии с вашим сервером CI.

person Jeffrey Chung    schedule 11.08.2017
comment
Я не подумал попробовать спецификации timeFactor, так как тайм-аут исходил от Akka, а не от Matcher. Но это сработало. Я не уверен, почему. - person Synesso; 12.08.2017