首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试间谍的返回值

测试间谍的返回值
EN

Stack Overflow用户
提问于 2016-05-03 01:11:35
回答 2查看 33.2K关注 0票数 8

我正在开发一个离子应用程序。calling函数允许用户在factory.call中呼叫号码。

代码语言:javascript
复制
factory.call = '345-678-9087';

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

这是上面的茉莉花测试,

代码语言:javascript
复制
it('calling method', function(){
    spyOn(factory, 'calling');
    factory.calling();
    expect(typeof(windowMock.location.href)).toEqual('string');
});

上面的测试可以很好地通过,但它不会测试factory.calling()返回的确切值。我尝试过以下几种方法,但都没有成功。

1)

代码语言:javascript
复制
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").

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-03 01:22:44

首先,您的工厂不会返回任何内容:

代码语言:javascript
复制
factory.calling = function(){
    return $window.location.href = 'tel:' + factory.call;
};

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

代码语言:javascript
复制
factory.calling = function(){
    return 'tel:' + factory.call;
};

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

代码语言:javascript
复制
it('calling method', function(){
    spyOn(factory, 'calling');
    factory.calling();
    expect(factory.calling).toHaveBeenCalled();
});

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

代码语言:javascript
复制
it('calling method', function(){
    expect(factory.calling()).toEqual('tel: ' + factory.call);
});

或者您可以通过匿名函数调用它,如下所示:

代码语言:javascript
复制
it('calling method', function(){
    expect(function(){return factory.calling();}).toEqual('tel: ' + factory.call);
});

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

代码语言:javascript
复制
it('calling method', function(){
    var result = factory.calling();
    expect(result).toEqual('tel: ' + factory.call);
});

我可能还建议您使用您提供的固定数据进行测试,因为这种类型的测试不应该命中数据库。此外,您应该始终坚持OAPT (就像您所做的那样)。

票数 10
EN

Stack Overflow用户

发布于 2017-04-14 14:07:35

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

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36987886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档