一尘不染

使用$ resource时,量角器超时,等待与页面同步

angularjs

我正在使用小型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。


阅读 228

收藏
2020-07-04

共1个答案

一尘不染

这是一个已知问题,但是有一个临时解决方法。设置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);
  });
});
2020-07-04