Я пытаюсь написать несколько функциональных тестов и хочу смоделировать сервис, который использует внешнего поставщика. Но я не могу настроить макет для функций, которые возвращают EitherT
Это Черта, реализация которой вызывает внешний сервис
@ImplementedBy(classOf[ExternalServiceImpl])
trait ExternalService {
def index: EitherT[Future, String, JsValue]
}
В свойстве CustomAppPerSuite я настроил
val mockExternalService = mock[ExternalService]
implicit override lazy val app = new GuiceApplicationBuilder()
.in(Mode.Test)
.overrides(bind[ExternalService].toInstance(mockExternalService))
.build()
val externalService = app.injector.instanceOf[ExternalService]
Тогда, когда я пытаюсь высмеять успешный ответ
"ExternalController#index" should {
"return index data" in {
doReturn(EitherT.rightT(Json.parse("""{"key": "value"}""")).when(externalService).index
val fakeRequest = FakeRequest(GET, "/api/external")
val result = externalController.index().apply(fakeRequest)
status(result) mustBe OK
}
Но я получаю эту ошибку
[error] found : cats.data.EitherT[cats.package.Id,Nothing,JsValue]
[error] required: cats.data.EitherT[scala.concurrent.Future,String,JsValue]
[error] def index = EitherT.rightT(
Я только хочу высказать удачный ответ, потому что это то, что я тестирую. Есть ли способ сделать это?