【问题标题】:Spy a method having multiple arguments and a callback监视具有多个参数和回调的方法
【发布时间】:2018-09-13 07:52:20
【问题描述】:

我有一个类似下面的方法

service.myMethod(reqBody,true, false, false, (success) => {

    },(failure)=>{

    });

我想监视这个方法并想模拟成功回调,我尝试了以下方法

const service = TestBed.get(Service);
spyOn(service, 'myMethod').and.callFake(function (reqBody, success,error) {
        return success({});
    });

它的投掷成功不是函数。 还尝试了以下

spyOn(service, 'myMethod').and.callFake(function (reqBody,true,false,false, success,error) {
        return success({});
    });

显示编译错误。

【问题讨论】:

  • 您的假呼叫缺少reqBody 和回调之间的 3 个布尔参数。
  • @madara 我试过了,但它显示编译时错误。
  • 得到了解决方案。参考github.com/jasmine/jasmine/issues/1603

标签: javascript typescript jasmine spy spyon


【解决方案1】:

在以下解决方案中 boolean1、boolean2、boolean3 将接收值“真、假、假”,但您不能在函数级别定义值。

spyOn(service, 'myMethod').and.callFake(function (reqBody, boolean1, boolean2, boolean3, success, error) {
    return success({});
});

【讨论】:

    【解决方案2】:

    Spying 不是这样工作的,它会搜索 success(),这显然在您的代码中不可用。此处未加载依赖项意味着服务作为独立组件工作。

    要测试服务,请单独编写服务测试,在这里你可以做的是使用 .and.returnvalue() 或 .and.returnvalues() 代替这将返回你想要的任何东西。请查看其文档以获得更好的想法 (https://jasmine.github.io/2.0/introduction.html#section-Spies:_%3Ccode%3Eand.returnValue%3C/code%3E)

    否则在上面的测试文件中编写一个公共成功函数并将其声明为公共。

    【讨论】:

    • 尝试阅读完整代码,成功在方法参数中。
    猜你喜欢
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 2014-09-20
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多