angularjs - Angular Mocks 'module' 第二次运行失败

标签 angularjs unit-testing mocha.js chai

我正在尝试为我创建的 angular.service (工厂)编写一些单元测试。我无法让我的测试运行,因为与 angular.mock.inject 函数配对时,angular.mock.module 函数在第二次调用时失败。我已经验证我的测试与这些错误无关,因为它永远不会进入我的第二次测试,并且第一个测试顺利通过。该错误来自 beforeEach ,我在其中重新初始化了正在测试的 Angular 模块。

这是我的简化代码:

// service code
function daEvents ($rootScope) {
  var api = {
    on: function () {}
  };

  return api;
}

daEvents.$inject = ['$rootScope'];

angular.module('test', []).factory('daEvents', daEvents);

// test code
describe('daEvents', function () {
  beforeEach(angular.mock.module('test'));

  var daEvents;
  beforeEach(angular.mock.inject(function (_daEvents_) {
    daEvents = _daEvents_;
  }));

  it('should exist', function () {
    chai.expect(daEvents).to.exist;
  });

  it('should test ok', function () {
    chai.expect(true).to.be.true;
  });
});

我收到此错误:

Error: [ng:areq] Argument 'fn' is not a function, got string
http://errors.angularjs.org/1.5.0-beta.2/ng/areq?p0=fn&p1=not%20a%20function%2C%20got%20string
    at https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-beta.2/angular.js:68:12
    at assertArg (https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-beta.2/angular.js:1810:11)
    at assertArgFn (https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-beta.2/angular.js:1820:3)
    at Function.annotate (https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-beta.2/angular.js:3930:5)
    at Function.angular.injector.$$annotate (:425:187)
    at Object.invoke (https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-beta.2/angular.js:4626:36)
    at :428:256
    at Object.forEach (https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-beta.2/angular.js:340:20)
    at a.workFn (:428:9)
    at t (https://cdnjs.cloudflare.com/ajax/libs/mocha/2.3.4/mocha.min.js:7:33286)

查看这个 JSFiddle:

JSFiddle Example

最佳答案

这是一个已知问题,已修复:https://github.com/angular/angular.js/issues/13397

关于angularjs - Angular Mocks 'module' 第二次运行失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34078654/

相关文章:

javascript - AngularJS 中的 Defer 和 Promise 无法正常工作

javascript - Angular ng-click 给出语法错误 : Token '{' invalid key at column 22 of the expression

javascript - AngularJS 指令,在元素后插入 HTML

javascript - 等待 .forEach() 完成的最佳方法

unit-testing - 您如何使用遗留代码实现测试驱动开发?

unit-testing - 编写集成测试时如何访问主包中的函数?

c - 如何 stub 声明为 "extern void _x"的变量/函数

javascript - 如何将 mocha 测试框架与 node.js 和sails.js 一起使用

reactjs - 使用 react-testing-library 时使用 mocha 和 chai 进行断言?

node.js - 抑制 chai 中的日志输出