如何使用 sinon 在另一个函数(我正在测试)中模拟一个函数?

新手上路,请多包涵

假设我有一个功能

Func a() {
    //Do Something
    let c = b();
    return c;
}

我想测试函数 a 和模拟 b() 并且在模拟中想要分配 c。 Sinon.Stub(Test,“b”).returns(“DummyValue”); c 应分配 DummyValue。

我怎样才能做到这一点?

 describe("a", () => {
    let a = a();
    //mock b();
    action = execute(a);
    expect(action).should.return.("DummyValue");
})

原文由 Ravi Shankar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 384
1 个回答

当我们在同一个文件中有 2 个函数并且想要存根其中一个并测试另一个时。例如:测试:tests.js

 let ComputeSumStub = sinon.stub(OfflineLoader, "ComputeSum");
const ans = function ()
{
    return 10;
};
ComputeSumStub.returns(ans);
const actualValue: number = OfflineLoader.sum();
expect(actualValue).to.be.equal(10);

开发者:foo.js

 function sum(): number
{
    return ComputeSum(8, 9);
}

function ComputeSum(a: number, b: number): number
{
    return a + b;
}

我们不能那样做,因为编译后函数以不同的签名、全名导出,并且在存根时我们对全局函数进行存根,但在从另一个函数内部调用它时,我们调用局部函数,因此它不起作用。有一种解决方法可以做到这一点。

 foo.js
const factory = {
  a,
  b,
}
function a() {
  return 2;
}

function b() {
  return factory.a();
}

module.exports = factory;

测试.js

 const ser = require('./foo');
const sinon = require('sinon');

const aStub = sinon.stub(ser, 'a').returns('mocked return');
console.log(ser.b());
console.log(aStub.callCount);

参考: 使用 Sinon 在同一文件中存根方法

原文由 Ravi Shankar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题