'未定义'不是函数 - AngularJS的Jasmine单元测试

时间:2015-06-25 21:03:32

标签: angularjs unit-testing jasmine karma-jasmine

我无法弄清楚为什么我会一直得到这个例外。该服务在一个模块中,帮助者(被测单元)在另一个模块中。我试图模拟服务(这是帮助程序的依赖项)并创建帮助程序注入该模拟服务。

感谢您的任何想法!

  

TypeError:' undefined'不是一个功能(评估   ' jasmine.spyOn(myService,' someData')')

以下是测试:

describe('myHelper test', function () {
var myHelper, myService;
var expectedData = 'test';

beforeEach(module('serviceModule'));
beforeEach(module('helperModule'));

    it('works', function() {

        module(function($provide) {
            $provide.service('myService', function() {
                someData = jasmine.spyOn(myService, 'someData').and.callFake(function(){
                   return 100; });
            });
        });

        var mockMyService;

        inject(function(myService){
            mockMyService = myService;
        });

        angular.module('helperModule').config(['myHelperProvider', function (myHelperProvider) {
            return myHelper(mockMyService, _);
        }]);

        expect(myHelper.someData()).toEqual(expectedData);
    });

});

1 个答案:

答案 0 :(得分:2)

如果您使用spyOn,那么您应该在测试中注入真实服务,然后执行spyOn

 inject(function(myService){
            jasmine.spyOn(myService, 'someData').and.callFake(function(){
                   return 100; });
            });
            mockMyService = myService;
        });

目前,您正尝试通过注入原始服务myService来创建模拟服务myService(也有错误,因为您尚未注入原始服务)!