angularjs - “未定义”不是函数 - AngularJS 的 Jasmine 单元测试

标签 angularjs unit-testing jasmine karma-jasmine

我不明白为什么我总是遇到这个异常。服务位于一个模块中,助手(被测单元)位于另一个模块中。我正在尝试模拟该服务(这是助手的依赖项)并创建注入(inject)该模拟服务的助手。

感谢您的任何想法!

TypeError: 'undefined' is not a function (evaluating '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);
    });

});

最佳答案

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

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

当前您正在尝试通过注入(inject)原始服务myService来创建模拟服务myService(这也有错误,因为您还没有完成原始服务的注入(inject))!

关于angularjs - “未定义”不是函数 - AngularJS 的 Jasmine 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31060752/

相关文章:

testing - 有没有一种方法可以对 Jasmine 测试进行分类并管理排除项

angularjs - 如何在测试结束时关闭 selenium webdriver?

javascript - 如何按值获取对象索引?

javascript - AngularJS 和 Jersey REST DELETE 操作失败,状态代码为 415

AngularJS - 在页面之间传递数据

r - 有没有办法通过文学编程进行测试驱动开发?

javascript - 单击同一按钮提交并返回

unit-testing - 在 Grails App 中测试自定义约束

r - 未找到 devtools::test 对象

angularjs - 如何在 jasmine 规范中使用 $promise.then 模拟 AngularJS $resource