2013-12-11 26 views
4

這是我的問題,一步一步:))我認爲它讀取更好這種方式,不像牆壁文字可憐地試圖解釋我的領域特定的問題。影響數據庫的角度e2e測試

1)我們有一個Angular.js應用程序與PHP後端支持MongoDB存儲。

2)Protractor用於端到端測試。 3)需要測試改變數據庫的頁面,即註冊場景 - 我正在經歷測試中的所有註冊步驟,因此數據庫獲取新的用戶記錄。

4)可以預計,運行後測試會失敗,因爲db有測試用戶的記錄,不需要註冊 - 用戶被重定向到主頁。

我正在考慮爲node.js獲得mongodb包,並在測試中與數據庫交互。
但它似乎並不正確:數據庫連接的配置文件在後端的php文件中,而我試圖編寫我們的應用程序的純前端部分的測試。

任何想法?

+1

什麼是你想在這裏測試?隔離測試的目標很重要。如果您的目標是您的AngularJS項目的E2E測試,那麼您可以使用http://docs.angularjs.org/api/ngMockE2E.$httpBackend嘲笑HTTP交互。 – pherris

+0

不幸的是,在量角器測試中沒有'inject'函數可用,所以你不能像在Karma單元測試中那樣注入'$ httpBackend'模擬。 ( –

+0

)如果你在嘲笑任何東西,你顯然不理解「端到端」的概念,這些都是驗收測試,應該是最終用戶的體驗,我不知道*任何*我的應用程序的最終用戶向我的代碼注入一個模擬庫 – hackel

回答

1

我會模擬出與你的PHP應用程序的交互。這將允許您將測試隔離到Angular代碼,並更明確地測試數據中的邊界情況(或服務器端的問題)。 。http://docs.angularjs.org/api/ngMockE2E $ httpBackend

這裏是另外一個答案,可能對您會有所幫助:mock $httpBackend in angular e2e tests

+1

嘿下來投票者,爲什麼不添加一些意見,你認爲這個問題是? – pherris

+1

如果你嘲笑的東西,那麼它不再是一個端到端的測試這只是另一種形式的集成測試,這不是OP所期望的。 – hackel

+0

儘管它是UI代碼的端到端。 – pherris

3

有一個簡單的方法來做到這一點。如果您的應用程序中有角色服務與您的後端對話,則可以使用量角器進行調用。

下面是一個例子:

https://github.com/andresdominguez/protractor-meetup/blob/master/test/e2e/api-helper.js

function createObject(data) { 
    return browser.executeAsyncScript(function(data, callback) { 
    var api = angular.injector(['ProtractorMeetupApp']).get('apiService'); 
    api.member.save(data, function(newItem) { 
     callback(newItem._id); 
    }); 
    }, data); 
} 

這個代碼將被序列,這將在瀏覽器上執行。我在ProtractorMeetupApp模塊中有一個名爲apiService的服務。 API服務可以創建,更新等

您的測試應該是這樣的:

https://github.com/andresdominguez/protractor-meetup/blob/master/test/e2e/member3-spec.js

it('should call api', function() { 
    // Create a new member. 
    createObject({name: 'test member'}).then(function(id) { 
    console.log(id) 
    }); 
});