我想对返回EssentialAction. 我将 a 传递FakeRequest给它,然后返回 a Iteratee[Array[Byte], Result]。
它看起来像测试助手contentAsString,contentType并且status不接受这种结果类型。
我是否缺少隐式转换?是否有一个控制器在没有提出一个整体的情况下进行单元测试的例子FakeApplication?
我想对返回EssentialAction. 我将 a 传递FakeRequest给它,然后返回 a Iteratee[Array[Byte], Result]。
它看起来像测试助手contentAsString,contentType并且status不接受这种结果类型。
我是否缺少隐式转换?是否有一个控制器在没有提出一个整体的情况下进行单元测试的例子FakeApplication?
一个基本动作是一个RequestHeader => Iteratee[Indata, Result],你可以应用它,FakeRequest因为它实现了RequestHeader。要实际执行 iteratee,你要么用数据填充它,要么立即告诉它没有更多的 indata。对于这两种情况,您都会得到Future[Result]你需要在测试中等待的结果。
因此,对于没有请求主体的简单 GET(使用 play 测试助手 await 方法),您可以这样做:
val iteratee = controllers.SomeController.action()(FakeRequest())
val result: Result = await(iteratee.run)
如果您想使用请求正文进行请求,您将不得不做更多的事情才能将请求正文提供给迭代者,并且还要注意正确编码您的 indata 数据。
在 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)
}