测试间谍的返回值

时间:2016-05-02 17:11:35

标签: jasmine karma-jasmine

我正在开发一款Ionic应用程序。 calling功能允许用户拨打factory.call中的号码。

factory.call = '345-678-9087';

factory.calling = function(){
    return $window.location.href = 'tel:' + factory.call;
};

这是上面的Jasmine测试,

it('calling method', function(){
    spyOn(factory, 'calling');
    factory.calling();
    expect(typeof(windowMock.location.href)).toEqual('string');
});

上述测试通过正常,但它不会测试factory.calling()返回的确切值。我试过以下没有运气。

1)

it('calling method', function(){
    var emergency = spyOn(factory, 'calling');
    factory.calling();
    expect(emergency).toEqual("'tel:' + factory.call");
});

2)spyOn(factory, "calling").andCallThrough().

3)spyOn(factory, "calling").andReturn("'tel:' + factory.call").

2 个答案:

答案 0 :(得分:11)

不确定您是否还需要此功能,但呼叫信息包含“returnValue”属性。 所以它可以这样测试: 期望($ scope.isFilterError.calls.first()的returnValue。).toBeFalsy();

答案 1 :(得分:6)

首先,您的工厂没有退货:

factory.calling = function(){
    return $window.location.href = 'tel:' + factory.call;
};

调用作为赋值的$ window.location.href不会返回任何内容。在我看来,那个电话不应该在那里,你的方法应该是:

factory.calling = function(){
    return 'tel:' + factory.call;
};

这样做,你有一个返回值。此外,您不会存储在可以测试它的任何位置返回的值。通常,您使用间谍来检查方法是否被调用,如下所示:

it('calling method', function(){
    spyOn(factory, 'calling');
    factory.calling();
    expect(factory.calling).toHaveBeenCalled();
});

要检查方法返回的内容,可以在expect块中调用它,如下所示:

it('calling method', function(){
    expect(factory.calling()).toEqual('tel: ' + factory.call);
});

或者你可以通过这样的匿名函数来调用它:

it('calling method', function(){
    expect(function(){return factory.calling();}).toEqual('tel: ' + factory.call);
});

或者您可以先调用它,然后检查它返回的值,如下所示:

it('calling method', function(){
    var result = factory.calling();
    expect(result).toEqual('tel: ' + factory.call);
});

我可能还建议您使用您提供的固定数据进行测试,因为此类测试不应该访问数据库。此外,你应该始终坚持使用OAPT(就像你已经完成的那样。)