2012-07-04 40 views
4

我們正在嘗試爲我們的視圖編寫測試,但其中一些需要會話變量才能正確呈現。這是標準測試的樣子:用於在Java Play中測試的HTTP上下文! 2.0.2

@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

這是我周圍的登錄表單代碼:

Form<Login> loginForm = Controller.form(Login.class); 

不過,我相信問題出在控制器內被調用,因爲該視圖不使用任何會話屬性。但是,authenticate()方法(在控制器中呈現,我相信當表單提交給視圖時)使用會話。

+0

你是否從遊戲命令行運行測試?我知道如果從eclipse運行測試可能會有問題。 – maialithar

+0

是的,我們在終端上運行'play test'。 – nicohvi

+0

請在你的loginForm模擬器中顯示代碼。 –

回答

0

如果您發佈了整個視圖,將會很有幫助,因爲您可能使用的是auth插件/ i18n插件或類似於使用會話屬性的類似內容。在運行測試之前,您也可以嘗試用Mocktio或類似的方法嘲笑上下文。

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

我建議您再次檢查會話屬性時再次檢查您的視圖。

相關問題