我正在測試一個小的AngularJS應用程序的量角器。
這是測試:
describe('Testing Protractor', function() {
var draftList;
it('should count the number of drafts', function() {
browser.get('#/');
draftList = element.all(by.repeater('newsletter in drafts'));
expect(draftList.count()).toEqual(2);
});
});
控制器:
angular.module('myApp.controllers', []).
controller('DraftsCtrl', ['$scope', 'Draft', function($scope, Draft) {
$scope.drafts = Draft.query();
}])
服務吃水:
angular.module('myApp.services', ['ngResource']).
factory('Draft', ['$resource',
function($resource) {
return $resource('api/drafts/:id')
}])
運行使用量角器結果在下面的錯誤這個測試:
Error: Timed out waiting for Protractor to synchronize with the page after 11 seconds
但是,如果在控制器我改變這一行:
$scope.drafts = Draft.query();
這樣:
$scope.drafts = [];
符合市場預期,但更重要的是該測試失敗:不超時。
通過查詢()功能,無論是在瀏覽器中手動運行該應用時,在由量角器打開瀏覽器窗口看時,該API返回的數據正確地轉發器顯示。
爲什麼量角器無法與網頁同步,當服務與API溝通?
AngularJS是v1.2.0-rc3。量角器是v0.12.0。
謝謝,我稍後再嘗試了這一點,讓你知道它是否工作。實際上,我在發佈之前已經閱讀過這個GitHub問題,但我的印象是隻有在我的測試應用程序沒有執行的定期輪詢API時才需要解決方法。它只在初始化控制器時發送一次API請求。 –
這確實是正確的解決方案。由於Protractor 0.12.0將Protractor的實例公開爲'browser',因此在'element.all(by.repeater('...'));'之前添加'browser.ignoreSynchronization = true;'就足夠了。 –
完美的作品! – softvar