用于Java Play中测试的HTTP上下文!2.0.2
我们正在尝试为视图编写测试,但其中一些需要会话变量才能正确呈现。这就是标准测试的样子:用于Java Play中测试的HTTP上下文!2.0.2,java,http,testing,playframework,playframework-2.0,Java,Http,Testing,Playframework,Playframework 2.0,我们正在尝试为视图编写测试,但其中一些需要会话变量才能正确呈现。这就是标准测试的样子: @Test public void indexTest() { running(fakeApplication(), new Runnable() { public void run() { Content html = views.html.index.render(loginForm); assertThat(contentType(
@Test
public void indexTest() {
running(fakeApplication(), new Runnable() {
public void run() {
Content html = views.html.index.render(loginForm);
assertThat(contentType(html)).isEqualTo("text/html");
assertThat(contentAsString(html)).contains("log in");
}
});
}
loginForm是我们在测试类中声明的模拟表单
但是,当我们尝试运行此测试时,会出现以下错误:
'此处没有可用的HTTP上下文'
我们尝试使用testServer并尝试从对该服务器的请求中获取http上下文,但没有成功
谢谢:-)
编辑@nico_ekito
以下是有关我的loginForm的代码:
Form<Login> loginForm = Controller.form(Login.class);
formloginform=Controller.Form(Login.class);
但是,我认为问题在于被调用的控制器,因为视图不使用任何会话属性。但是,authenticate()方法(在控制器中,我相信表单提交到视图时会呈现该方法)使用会话。如果发布整个视图,将非常有用,因为您可能正在使用auth插件/i18n插件或类似的东西,而这些插件反过来又使用会话属性。在运行测试之前,您还可以尝试使用Mocktio或类似工具模拟上下文
Context.current.set(
new Context(mock(Request.class),
new HashMap<String, String>(),
new HashMap<String, String>()));
Context.current.set(
新上下文(mock(Request.class),
新建HashMap(),
新的HashMap());
我建议您再检查一次您的视图,检查会话属性。您是否从“播放”命令行运行测试?我知道如果从eclipse运行测试可能会出现问题。是的,我们在终端中运行“播放测试”。请在loginForm模拟周围显示代码。为什么在视图中使用会话?您应该在控制器中获取会话变量,并使用参数显式地将其传递给视图,否?正如我在评论中所说,我们在视图中不使用会话(“因为视图不使用任何会话属性”)。