茉莉花模拟第二种方法

时间:2016-01-20 12:27:32

标签: javascript unit-testing jasmine

我试图在Jasmine中做以下事情,但不确定是否可能:

我有一个服务对象,有两种方法,A和B. 方法A调用方法B(B实际上是一个$ http调用,在测试期间我不想这样做:我想模仿它。)

在我的BeforeEach部分中,我这样做: spyOn(Serviceinstance, 'B').and.callFake(function(){ return true; });

在我的测试中:

var result = Serviceinstance.A();
expect(result).toBeTrue();

当然,B的实际代码返回false。 我的问题是我的测试总是失败。间谍中提供的功能永远不会被方法A调用。 另一方面,如果我像这样打电话给B:

var result = Serviceinstance.B();

然后调用间谍的功能,我的测试通过。

所以我应该像这样修改我的实例:

Serviceinstance.B = function(){return true;}

因为Jasmine无法模拟调用堆栈的“第二”级别? (对我来说似乎不太可能)

我肯定错过了一些东西......

1 个答案:

答案 0 :(得分:1)

这是一个有效的代码:

describe('Service test suite', function() {
    it('should return true', function() {
        var Serviceinstance = new Service();
        spyOn(Serviceinstance, 'B').and.callFake(function() {
            return true;
        });
        expect(Serviceinstance.A()).toBe(true);
    })
});

https://jsfiddle.net/ronapelbaum/9moLhhbr/