如何在同一个服务中模拟一个方法

时间:2015-10-20 13:38:46

标签: javascript angularjs unit-testing angularjs-service karma-jasmine

我有这样的服务:

var myApp = angular.module('myApp', []);

myApp.factory('myService', function() {

    var a = function() {
        return b();
    }

    function b() {
        return 'foo';
    }

    return {
        a: a
    };
});

现在,我想通过模仿a();来测试b();,例如通过让它返回 bar 。我的测试是这样的:

it('should call a() and return string bar', function() {
    // mock function b() here
    expect(myService.a()).toBe('bar');
});

在这种情况下如何模仿b();?我在考虑使用$provide,但它似乎仅适用于$inject

1 个答案:

答案 0 :(得分:0)

您可以使用 spyOn 。这是一个例子:

beforeEach(function(){
    spyOn(myService, 'b').and.returnValue('bar');
});

it('should call a() and return string bar', function() {
    expect(myService.a()).toBe('bar');
});

详细了解间谍活动http://jasmine.github.io/2.0/introduction.html#section-Spies