Как внедрить экземпляр конфигурации в scalatest?

Я хочу внедрить экземпляр конфигурации в один из моих тестовых классов, я расширяю свой тестовый класс с помощью ConfiguredApp и ввожу конфигурацию, это выглядит так:

@DoNotDiscover()
class MyApiServiceSpec extends FreeSpec with ScalaFutures with ConfiguredApp {

  implicit val formats = DefaultFormats

  implicit val exec = global

  lazy val configuration = app.injector.instanceOf[Configuration]

  "Global test" - {

    "testcase 1" in {

      Server.withRouter() {
        case GET(p"/get/data") => Action { request =>
          Results.Ok()
        }
      } { implicit port =>
        WsTestClient.withClient { implicit client =>
          val service = new MyApiService {
            override def config: Configuration = configuration
            override val ws: WSClient = client
          }


            whenReady(service.getData()) { res =>
//i will test stuff here
          }
        }
      }
    }
  }
}

(MyApiService is a trait)

Возникло исключение при вызове запуска для вложенного пакета — для ConfiguredApp требуется значение приложения, связанное с ключом «org.scalestplus.play.app» в карте конфигурации. Вы забыли пометить вложенный набор с помощью @DoNotDiscover? java.lang.IllegalArgumentException: ConfiguredApp требуется значение приложения, связанное с ключом «org.scalestplus.play.app» в карте конфигурации. Вы забыли пометить вложенный набор с помощью @DoNotDiscover?

у кого-то есть идея, почему это ...?

спасибо!333333


person jack miao    schedule 06.10.2016    source источник
comment
Подозрительно похоже: stackoverflow.com/questions/39878662/   -  person rethab    schedule 06.10.2016


Ответы (2)


Мой ответ не является ответом на текущий вопрос, но я хочу дать несколько советов. Если вы хотите написать модульные тесты для контроллеров или какой-либо службы, я бы предложил использовать PlaySpec. Чтобы внедрить пользовательскую конфигурацию для тестовой среды:

class MyControllerSpec extends PlaySpec with OneAppPerSuite {

    val myConfigFile = new File("app/test/conf/application_test.conf")
    val parsedConfig = ConfigFactory.parseFile(myConfigFile)
    val configuration = ConfigFactory.load(parsedConfig)

    implicit override lazy val app: Application = new GuiceApplicationBuilder()
    .overrides(bind[Configuration].toInstance(Configuration(configuration)))
    .build()

    "MyController #index" should {
        "should be open" in {
          val result = route(app, FakeRequest(GET, controllers.routes.MyController.index().url)).get
          status(result) mustBe OK
        }
    }

}
person Bob    schedule 06.10.2016

Кажется, вы пытались запустить этот тест в одиночку. Но с ConfiguredAppвы должны запустить этот тест с Suite, например

class AcceptanceSpecSuite extends PlaySpec with GuiceOneAppPerSuite {

  override def nestedSuites = Vector(new MyApiServiceSpec)
}

Инъекция выглядит нормально.

person pme    schedule 12.12.2017