我正在使用小型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 = [];
测试失败,但未达到预期目的,但更重要的是:它不会超时。
启用query()时,在浏览器中手动运行应用程序以及查看Protractor打开的浏览器窗口时,转发器均会正确显示API返回的数据。
当服务与API通信时,为什么Protractor无法与页面同步?
AngularJS是v1.2.0-rc3。量角器是v0.12.0。
这是一个已知问题,但是有一个临时解决方法。设置ptor.ignoreSynchronization = true。
ptor.ignoreSynchronization = true
例如:
describe('Testing Protractor', function() { var draftList; var ptor; beforeEach(function() { ptor = protractor.getInstance(); ptor.ignoreSynchronization = true; }); it('should count the number of drafts', function() { ptor.get('#/'); draftList = element.all(by.repeater('newsletter in drafts')); expect(draftList.count()).toEqual(2); }); });