2017-04-24 67 views
0

我有兩個單元測試失敗,因爲「[RuntimeException的:缺少CSRF令牌]」:播放框架CSRF令牌生成單元測試

running(testServer(3333, provideFakeApplication()),() -> { 
    assertThat(WS.url("http://localhost:3333").get().get(3000).getStatus() 
       ).isEqualTo(OK); 

running(testServer(3333, provideFakeApplication()), HTMLUNIT, browser -> { 
    browser.goTo("http://localhost:3333"); 
    assert.... 

我如何添加會話與CSRF令牌WS.url和browser.goTo?

測試正在嘗試達到具有表單的頁面。

+0

你看到:HTTP://計算器。 com/questions/19838347/testing-scala-play-2-2-1-controllers-with-csrf-protection? –

+0

是的,但我需要另一種解決方案。我在其他測試中使用Result.withSession(...)方法,工作正常。 –

回答

1

全局解決方案是使用啓用了CSRF過濾器的假應用程序。要做到這一點,你需要修改(即創建一個從WithApplication繼承一個類並重寫)您provideFakeApplication()如它創建的假冒應用程序通過在全局設置:

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()); 
    } 
} 
+0

哇。真棒!另外,有了這個,我不需要爲假請求做任何事情(...)。 –