2015-12-04 83 views
2

我正在尝试为我创建的角度服务(工厂)编写一些单元测试。我无法运行测试,因为angular.mock.module函数第二次在与angular.mock.inject函数配对时被调用失败。我已经证实,我的测试与这些错误无关,因为它从未进入我的第二个测试,并且第一次测试通过的很好。错误来自于beforeEach,我重新初始化了我正在测试的角度模块。Angular Mocks'module'第二次运行失败

这里是我的简化代码:

// 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

+0

我承认,这是一个很好的问题,但是,我的项目中有相同的代码,并且工作完美(唯一的区别是我不使用ngMock作为依赖关系,因此我有Karma这样做)。什么是服务的实际代码?顺便说一下,我使用Jasmine – Gianmarco

+0

@Gianmarco我正在使用MochaJS + chai。在我的Karma设置中,我添加了ngMock,但问题仍然相同。该服务的代码无关紧要,无论发生什么错误都会发生。也许这是一个摩卡问题? – nicksrandall

+0

这可能是...我可以保证,我有完全相同的代码来测试我的服务:'beforeEach(module('myModule')); var pageService,$ loc; beforeEach(注入(功能(_PageService_,$位置){ pageService = _PageService_; $ LOC = $位置; }));' – Gianmarco

回答