Junit 单元测试中的Play框架csrf令牌生成
我有两个单元测试失败,原因是[RuntimeException:缺少CSRF令牌]:Junit 单元测试中的Play框架csrf令牌生成,junit,playframework,csrf,Junit,Playframework,Csrf,我有两个单元测试失败,原因是[RuntimeException:缺少CSRF令牌]: running(testServer(3333, provideFakeApplication()), () -> { assertThat(WS.url("http://localhost:3333").get().get(3000).getStatus() ).isEqualTo(OK); 及 如何将带有CSRF令牌的会话添加到WS.url和browser.g
running(testServer(3333, provideFakeApplication()), () -> {
assertThat(WS.url("http://localhost:3333").get().get(3000).getStatus()
).isEqualTo(OK);
及
如何将带有CSRF令牌的会话添加到WS.url和browser.goTo
测试试图到达一个有表单的页面。全局解决方案是使用启用了CSRF过滤器的假应用程序。为此,您需要修改,即创建一个从WithApplication继承的类,并重写ProviderFakeApplication,例如它创建传入全局设置的假应用程序:
public abstract class TestWrapper extends WithApplication {
public class GlobalTestSettings extends play.GlobalSettings {
@Override
public <T extends EssentialFilter> Class<T>[] filters() {
return new Class[] { CSRFFilter.class };
}
}
@Override
protected FakeApplication provideFakeApplication() {
stop(fakeApplication()); // Stop the existing fake app and start over
Map<String, String> addConfig = new HashMap<>();
return fakeApplication(addConfig, new GlobalTestSettings());
}
}
你看到了吗?是的,但我需要另一个解决方案。我正在使用结果。使用Session。。。在其他的测试中,效果很好。令人惊叹的还有,有了这个,我就不需要再继续下去了。。。对于假请求也是如此。
public abstract class TestWrapper extends WithApplication {
public class GlobalTestSettings extends play.GlobalSettings {
@Override
public <T extends EssentialFilter> Class<T>[] filters() {
return new Class[] { CSRFFilter.class };
}
}
@Override
protected FakeApplication provideFakeApplication() {
stop(fakeApplication()); // Stop the existing fake app and start over
Map<String, String> addConfig = new HashMap<>();
return fakeApplication(addConfig, new GlobalTestSettings());
}
}