我正在测试一个小的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