播放2.5渲染视图测试,访问flash消息

时间:2016-04-15 11:39:14

标签: testing junit playframework playframework-2.5

这里简单的播放渲染视图测试。在视图模板中,我试图通过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$1.apply(index.template.scala:39)
 at views.html.index_Scope0$index$$anonfun$apply$1.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)

1 个答案:

答案 0 :(得分:1)

使用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()));
}