如何使用Protractor模拟Angular服务?

时间:2016-10-05 21:56:45

标签: javascript angularjs protractor

我有一些用Protractor编写的e2e测试。 我的一些测试会执行导致警报显示的内容(uib-alert)。 测试运行正常,可以查找并验证警报,但如果我使用uib-alert标记dismiss-on-timeout,则测试失败,因为量角器在执行断言之前等待超时。

问题:https://github.com/angular-ui/bootstrap/pull/2798https://github.com/angular/protractor/issues/169

因此,我想在运行量角器时创建没有dismiss-on-timeout标记的警报。

我的提醒是由这样的服务创建的:

angular.module('MyApp').factory("AlertService", function (...

如何在量角器上覆盖它?我正在尝试使用browser.addMockModule(' AlertService',mock),但这不起作用......

1 个答案:

答案 0 :(得分:1)

我是通过将AlertService提取到一个全新的模块然后模拟它来实现的。 我猜测量器不能模拟模块中的单个服务,只能模拟整个事件。

编辑: 我创建了alert.module.js:

angular.module('MyApp.alert', []);
angular.module('MyApp.alert').factory("AlertService", function($rootScope) {
...

他们,在protractor.conf.js:

exports.config = {
  framework: 'jasmine',
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: [],
  capabilities: {
    browserName: 'phantomjs',
    'phantomjs.binary.path': require('phantomjs-prebuilt').path
  },
  onPrepare: function() {
  ...
  function mockAlertService(){
    var alertMock = function() {
     angular.module('MyApp.alert', []);
     angular.module('MyApp.alert').factory("AlertService", function($rootScope) {
     ...
   }
   browser.addMockModule('MyApp.alert', alertMock);
  }