假设我有一个功能
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