Как выполнить множественный запрос в одном модуле тестирования Play 2 specs2

У меня есть простое веб-приложение, использующее инфраструктуру Play 2. У него есть два REST API:

  • /записывать
  • /читать

Я хочу реализовать функциональный тест для него. Я хочу, чтобы тест вызвал /write несколько раз, затем проверьте результат /read,

Но route функция возвращает Future, и я не мог найти способ позволить specs2 ждать моего Future,

Мой код выглядит так:

object MySpec extends Specification {

  "/write * 2, then /read" in new WithApplication {
    val write1 = route(app, FakeRequest(GET, '/write')).get
    val write2 = route(app, FakeRequest(GET, '/write')).get
    val read = route(app, FakeRequest(GET, '/read')).get

    // how to chain the requests so the execute one after another, and the specs2 can wait for it?

    status(read) must_==OK
  }
}

1 ответ

Решение

Разве ты не можешь сделать что-то подобное?

import play.api.mvc._
import play.api.test._
import scala.concurrent.Future

object MySpec extends Specification {

"/write * 2, then /read" in new WithApplication {
   val result = for{
     _ <- route(app, FakeRequest(GET, '/write'))
     _ <- route(app, FakeRequest(GET, '/write'))
     read <- route(app, FakeRequest(GET, '/read'))
   }yield{ read }

   status(result) mustEqual OK
}
Другие вопросы по тегам