假设我有一个功能

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");
})

最佳答案

当我们在同一个文件中有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;

test.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);

引用:Stubbing method in same file using Sinon

07-24 09:50
查看更多