我正在开发一款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").
答案 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(就像你已经完成的那样。)