【问题标题】:Stubbing nested function calls in sinon在 sinon 中存根嵌套函数调用
【发布时间】:2016-07-11 22:36:09
【问题描述】:

有三个单独的问题与这个问题相似,但没有一个与我的情况相似。

所以我基本上有一个以函数为参数的函数

var myfunc ( func_outer ) {
    return func_outer().func_inner();
}

在我的单元测试中,我希望能够制作 myfunc2 的存根。基本上我需要能够存根一个嵌套存根。我目前使用这种手动存根,但如果有办法,我宁愿使用 sinon 存根。

const func_outer = () => {
    return {
       func_inner: () => {return mockResponse;}
    }
};

有没有人遇到过这种情况。有没有简单的方法来解决这个问题?

【问题讨论】:

    标签: javascript unit-testing mocking sinon stubbing


    【解决方案1】:

    来自sinon documentation,您可以查看退货部分

    stub.returns(obj);
    使存根返回提供的值。

    您可以尝试以下方法:

    首先你应该确保你存根你的内部函数,然后让它返回你想要的值。

    func_innerStub = sinon.stub().returns('mockResponse')  
    

    然后存根您的外部函数并使其返回带有存根内部函数的对象。

    func_outerStub = sinon.stub().returns({func_inner: func_innerStub})
    

    您也可以使用 myfunc 函数遵循此模式,并将 func_outerStub 作为参数传递。

    【讨论】: