4

我们正在尝试为我们的视图编写测试,但其中一些需要会话变量才能正确呈现。这是标准测试的样子:

@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);

但是,我认为问题在于被调用的控制器,因为视图不使用任何会话属性。但是,authenticate() 方法(在控制器中,我相信当表单提交到视图时正在呈现)使用会话。

4

1 回答 1

0

如果您发布整个视图会很有帮助,因为您可能正在使用身份验证插件/i18n 插件或类似的东西,而这些插件又使用会话属性。在运行测试之前,您还可以尝试使用 Mocktio 或类似工具模拟上下文。

Context.current.set(
        new Context(mock(Request.class), 
                    new HashMap<String, String>(),  
                    new HashMap<String, String>()));

不过,我建议再检查一次您的视图,检查会话属性。

于 2013-05-01T18:34:04.813 回答