2011-05-11 72 views
3

我用GAE和playframework寫了一個小應用程序。玩法框架中的PUT方法FunctionalTest

我試圖測試PUT方法(用於更新),當從FunctionalTest它總是甚至 雖然我登錄在測試開始時的登錄頁面返回,可以通過 所有被證實所謂的 另一種方法工作正常。

它看起來使用PUT方法的會話丟失

任何人都有類似的問題時,什麼樣的?

我正在使用play 1.1.1

+1

嗨,我們需要更多的細節:你使用的是什麼代碼來調用put,你的路由項,上述方法的實現,如果把作品中的測試外,等等您可以提供更多的信息:) – 2011-05-11 14:16:16

+0

您是在本地主機還是在部署的GAE上測試?你們有什麼區別嗎?我知道GAE不支持許多Play核心功能,我想知道這是否是這些功能之一 – Codemwnci 2011-05-11 14:26:31

+0

嗨,感謝您的幫助。 – mericano1 2011-05-11 14:50:23

回答

3

看起來好像FunctionalTest中存在一個錯誤。 在所有的方法(POST,GET,DELETE)也攜帶了餅乾

if (savedCookies != null) request.cookies = savedCookies; 

此行是在PUT缺少以下行。另外,因爲savedCookies是私人的,所以您無法在測試中訪問它。

解決方法是在測試中將cookie映射定義爲私有變量,將其設置爲登錄響應cookie,然後使用此cookie與新請求調用POST。

這裏是我的代碼

private static Map<String, Http.Cookie> lastCookies; 

public void login(){ 
    String postUrl = Router.reverse("GAEActions.doLogin").url; 
    Map<String, String> map = Maps.newHashMap(); 
    map.put("email", "[email protected]"); 
    map.put("url", "/"); 
    map.put("isAdmin", "true"); 
    Map<String, File> fileMap = Maps.newHashMap(); 
    Response post = POST(postUrl, map, fileMap); 
    lastCookies = post.cookies; 
} 
public void test(){ 
.... 
    Request request = newRequest(); 
    request.cookies = lastCookies; 
    Response post = PUT(request, url,"application/json",json);