2014-10-22 54 views
4

我正在嘗試爲我們的應用程序的登錄過程編寫一些端到端測試,但在設置用戶需要更改方案的最佳方法時遇到困難他的密碼。在量角器測試中修改http響應

當我們的服務器響應成功登錄時,用戶對象返回changePassword字段。客戶然後檢查響應並相應地重定向。

我的問題是獲得測試設置,以便設置changePassword字段 - 最佳使用方法是什麼?

我看到我的選擇是:

  1. 有那些專門用於changePassword標誌在數據庫中設置試運行創造了一個全新的用戶與服務器的測試設置和拆除腳本。

    這看起來好像是最多的端到端的做法,但也可能是最努力&的代碼。

  2. 以某種方式攔截測試中的http響應,並修改changePassword標誌以僅爲此測試設置。

  3. 完全嘲笑http響應。使用這種方法是從端到端測試中刪除最多,但也許是最簡單的?

哪種方法最好或最常用?還有任何一般的指針如何實際上實現上述(特別是和)與量角器將是偉大的 - 我發現很難概念上直接在我的頭,因此很難知道什麼搜索。

我使用量角器作爲測試框架,angular.js客戶端供電,和一個節點服務器運行利用(除其他外)express.js的MongoDB

+0

你好,我處於同樣的情況。你得到了什麼選擇。你認爲選項2是否可能(如果是這樣,你是否做了一些研究)謝謝!這讓我發瘋......:S – r3x 2014-11-24 21:38:51

+0

是的,#2是可能的,現在我會添加一個答案。 – 2014-11-25 01:40:07

回答

5

考慮到這一點,選項1是最好的解決方案,但並不總是可行的。

選項2也是可能的,應該避免選項3。(CoffeeScript中)

e2eInterceptors =-> 

    angular.module('e2eInterceptors', []) 
    .factory('loginInterceptor',()-> 
    response: (response)-> 
     # Only edit responses we are interested in 
     return response unless response.match(/login/) 
     # do the modifiations 
     response.data.changePassword = true 
     # return the response 
     return response 
) 
    .config(($httpProvider)-> 
    $httpProvider.interceptors.push('loginInterceptor') 
) 

如果你想這樣做,然後你可以使用

browser.addMockModule('e2eInterceptors', e2eInterceptors) 

注入該模塊到您的測試:

對於方案二,一個模擬模塊可以像這樣被創建在全球範圍內,您可以將它放在量角器文件中的onPrepare函數中,否則只需在測試中調用它即可。

+0

非常感謝。 – r3x 2014-11-25 23:00:23

+0

我試圖使用這種方法,但每當我添加一個模擬模塊時,突然我的元素定位器告訴我他們在加載dom之前找不到任何元素。測試失敗,硒在大約1秒內退出。 – realisation 2016-01-29 15:29:34

+0

聽起來令人困惑,不知道它在哪裏,可能是一個錯誤的地方,可能是模塊名稱。 – 2016-01-29 15:35:13

1

我認爲你的第一種方法是最合適的。

無論如何,測試新的用戶創建將是有用的,所以這不是浪費。 例如,這個例子似乎是類似的:http://product.moveline.com/testing-angular-apps-end-to-end-with-protractor.html

+0

其實您提供的示例與您的答案不符。他們從我的問題中使用方法** 3 **。 – 2014-11-03 09:43:13

+0

呃抱歉。我只讀,直到「基本測試」部分,這是我認爲相關的,但你是正確的「超越基礎」部分是方法3,如你所說。 – 2014-11-03 10:26:35