play 2.5 render view 测试,获取flash messages

play 2.5 render view test, access to flash messages

这里简单的播放渲染视图测试。在视图模板中,我试图通过 flash.get() 访问会话信息。 但测试失败并显示消息 There is no HTTP Context available from here. 如何在 junit 测试上下文中将虚假会话数据添加到测试应用程序?

public class ApplicationTest  extends WithServer {

private FormFactory formFactory() {
    return app.injector().instanceOf(FormFactory.class);
}

@Test
public void renderTemplate() {
    Content html;
    session().put("session","123");
    html = index.render(formFactory().form(Auth.Login.class));
    assertTrue(contentAsString(html).contains("Hello"));
}

}

Test ApplicationTest.renderTemplate failed: java.lang.RuntimeException: There is no HTTP Context available from here., took 0.544 sec
 at play.mvc.Http$Context.current(Http.java:57)
 at play.mvc.Http$Context$Implicit.flash(Http.java:307)
 at views.html.index_Scope0$index$$anonfun$apply.apply(index.template.scala:39)
 at views.html.index_Scope0$index$$anonfun$apply.apply(index.template.scala:38)
 at views.html.helper.form_Scope0$form.apply(form.template.scala:35)
 at views.html.index_Scope0$index.apply(index.template.scala:38)
 at views.html.index_Scope0$index.render(index.template.scala:141)
 at views.html.index.render(index.template.scala)
 at ApplicationTest.renderTemplate(ApplicationTest.java:37)

使用 WithServer 启动您可以向其发出请求的应用程序。对于您在此处描述的测试,您需要使用 WithApplication.

要手动设置上下文,您可以覆盖 startPlay 方法。

@Override
public void startPlay()
{
    super.startPlay();
    Http.Context.current.set(new Http.Context(1L,
                                              Mockito.mock(RequestHeader.class),
                                              Mockito.mock(Http.Request.class),
                                              Collections.<String, String>emptyMap(),
                                              Collections.<String, String>emptyMap(),
                                              Collections.<String, Object>emptyMap()));
}