2013-07-23 5 views
4

Я хочу, чтобы модуль тестировал метод контроллера, который возвращает EssentialAction. Я передаю ему FakeRequest и вернусь Iteratee[Array[Byte], Result].Play 2.1: модульное тестирование EssentialActions

Похоже, что тестовые помощники contentAsString, contentType и status не принимают этот тип результата.

Есть ли неявное преобразование, которое мне не хватает? Есть ли пример где-то из контроллеров, которые тестируются на единицу, без привлечения всего FakeApplication?

ответ

3

Существенное действие: RequestHeader => Iteratee[Indata, Result], вы можете применить его к FakeRequest, так как оно реализует RequestHeader. Чтобы на самом деле выполнить итерацию, вы либо заполняете ее данными, либо просто сразу указываете, что больше нет индатов. Для обоих случаев вы получаете Future[Result], которые вам нужно подождать в тестах.

Таким образом, для простого ГЭТ, без тела запроса (с использованием тест-игра помощника метод ждать) вы могли бы сделать это следующим образом:

val iteratee = controllers.SomeController.action()(FakeRequest()) 
val result: Result = await(iteratee.run) 

Если вы хотите сделать запросы с просьбой органов вы должны сделайте еще кое-что, чтобы иметь возможность кормить тело запроса итератором, а также правильно обрабатывать данные кодирования.

+0

Где находится тестовый помощник в ожидании? Какой импорт мне нужен? –

+0

play.api.test.Helpers._ упоминается в документах здесь: http://www.playframework.com/documentation/2.1.x/ScalaTest или хорошо, но не метод ожидания, а импорт. – johanandren

+0

Спасибо, это очень помогло –

1

В Play 2.3, PlaySpecification включает в себя несколько вспомогательных методов. Чтобы обрабатывать EssentialActions, вы должны использовать call. В результате будущее будет обрабатываться другими более конкретными помощниками.

class MySpec extends PlaySpecification { 
    ... 
    val result1: Result = call(controllers.SomeController.action(), FakeRequest(...)) 
    status(of = result1) must equalTo (OK) 
    ... 
    val result2 = call(controllers.SomeController.action(), RequestHeader(...), "Body") 
    status(of = result2) must equalTo (BAD_REQUEST) 
} 
Смежные вопросы