编辑:我正在使用Play!1.2版(生产版)
我想测试由安全模块类保护的控制器操作,因此我需要在测试我的控制器之前登录(否则我将被重定向到登录页面).
我在调用安全操作之前尝试登录.这是我的FunctionalTest的样子:
@Test
public void someTestOfASecuredAction() {
Map<String, String> loginUserParams = new HashMap<String, String>();
loginUserParams.put("username", "admin");
loginUserParams.put("password", "admin");
// Login here so the following request will be authenticated:
Response response = POST("/login", loginUserParams);
// The following is an action that requires an authenticated user:
Map<String, String> params;
params.put("someparam", "somevalue");
response = POST("/some/secured/action", params);
assertIsOk(response); // this always fails because it is a 302 redirecting to /login
}
Run Code Online (Sandbox Code Playgroud)
单步执行代码,我已经验证登录帖子是否有效 - 它会导致重定向响应,并将位置设置为主页(表示登录成功).
但随后在随后的安全行动调用中,我总是被重定向到"/ login"页面 - 表明我之前的登录没有坚持第二个POST请求.
查看FunctionalTest的源代码,我看到有一个@Before拦截器可以清除所有cookie.我尝试在我自己的中间超类中覆盖此截取(以保留cookie),但这也不起作用.
编辑:我把play.mvc.Before拦截器与org.junit.Before混淆了 - …
我正在尝试围绕从会话中读取一些数据的方法构建一些测试.
我尝试扩展FakeRequest和覆盖该session值,但是我在编译时遇到错误,说session必须是一个val覆盖时,这将无效.
如何修改a FakeRequest()以向会话添加值?