我正在开发一个离子应用程序。calling函数允许用户在factory.call中呼叫号码。
factory.call = '345-678-9087';
factory.calling = function(){
return $window.location.href = 'tel:' + factory.call;
};这是上面的茉莉花测试,
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").
发布于 2016-05-03 01:22:44
首先,您的工厂不会返回任何内容:
factory.calling = function(){
return $window.location.href = 'tel:' + factory.call;
};作为赋值的对$window.location.href的调用将不会返回任何内容。在我看来,这个调用不应该在那里,而你的方法应该是:
factory.calling = function(){
return 'tel:' + factory.call;
};这样做,你就有了一个返回值。此外,您不会将返回的值存储在任何可以测试它的地方。通常,您使用spy来检查是否调用了该方法,如下所示:
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 (就像您所做的那样)。
发布于 2017-04-14 14:07:35
不确定您是否还需要它,但呼叫信息包含"returnValue“属性。所以它可以像这样测试: expect($scope.isFilterError.calls.first().returnValue).toBeFalsy();
https://stackoverflow.com/questions/36987886
复制相似问题