测试 return 间谍值
Test return value of a spy
我正在开发 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()
returns的确切值。我尝试了以下但没有成功。
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").
首先,您的工厂没有return任何东西:
factory.calling = function(){
return $window.location.href = 'tel:' + factory.call;
};
调用 $window.location.href 作为赋值不会 return 任何东西。在我看来,那个电话不应该在那里,你的方法应该是:
factory.calling = function(){
return 'tel:' + factory.call;
};
这样做,你就有了一个 return 值。此外,您不会将 returned 的值存储在任何可以对其进行测试的地方。通常,您使用间谍来检查是否调用了该方法,如下所示:
it('calling method', function(){
spyOn(factory, 'calling');
factory.calling();
expect(factory.calling).toHaveBeenCalled();
});
要检查方法 return 的内容,您可以在 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);
});
或者您可以先调用它,然后检查它的值 return,如下所示:
it('calling method', function(){
var result = factory.calling();
expect(result).toEqual('tel: ' + factory.call);
});
我可能还建议您使用您提供的固定数据进行测试,因为这种类型的测试不应该访问数据库。另外,你应该始终坚持 OAPT(就像你所做的那样。)
不确定您是否还需要这个,但通话信息包含 "returnValue" 属性。
所以可以这样测试:
期望($scope.isFilterError.calls.first().returnValue).toBeFalsy();
我正在开发 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()
returns的确切值。我尝试了以下但没有成功。
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").
首先,您的工厂没有return任何东西:
factory.calling = function(){
return $window.location.href = 'tel:' + factory.call;
};
调用 $window.location.href 作为赋值不会 return 任何东西。在我看来,那个电话不应该在那里,你的方法应该是:
factory.calling = function(){
return 'tel:' + factory.call;
};
这样做,你就有了一个 return 值。此外,您不会将 returned 的值存储在任何可以对其进行测试的地方。通常,您使用间谍来检查是否调用了该方法,如下所示:
it('calling method', function(){
spyOn(factory, 'calling');
factory.calling();
expect(factory.calling).toHaveBeenCalled();
});
要检查方法 return 的内容,您可以在 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);
});
或者您可以先调用它,然后检查它的值 return,如下所示:
it('calling method', function(){
var result = factory.calling();
expect(result).toEqual('tel: ' + factory.call);
});
我可能还建议您使用您提供的固定数据进行测试,因为这种类型的测试不应该访问数据库。另外,你应该始终坚持 OAPT(就像你所做的那样。)
不确定您是否还需要这个,但通话信息包含 "returnValue" 属性。 所以可以这样测试: 期望($scope.isFilterError.calls.first().returnValue).toBeFalsy();