Когда у нас есть 2 функции в одном файле и вы хотите заглушить один из них и проверить другой. Например ,: Test: 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);
Dev: foo.js
function sum(): number
{
return ComputeSum(8, 9);
}
function ComputeSum(a: number, b: number): number
{
return a + b;
}
Мы не можем сделать это, потому что после компиляции функции экспортируются с разными подписями, с полным именем и в то время как stubbing мы заглушаем глобальную функцию, но, вызывая ее из другой функции, мы вызываем локальную функцию, поэтому она не работает. Существует обходное решение для этого.
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);
Ref: Stubbing method in same file using Sinon
Я не хочу, чтобы передать функцию/окурок в качестве параметра. Я хочу сделать это, не передавая функцию b. Является ли это возможным? –
Это возможно, но не рекомендуется через что-то вроде библиотеки rewire. Патч обезьяны - это искусство изменения модуля или пакета во время выполнения, чтобы изменить ход выполнения. Таким образом, вы были бы патчем обезьян. Я считаю, что мой подход проще, чем установка внешнего модуля для изменения исполнения во время выполнения. – therewillbecode