Sinon.js provides Fakes. But I didn't see any essential differences with Stubs. Here is example code under test:
index.ts:
export function main(callback) {
return callback();
}
index.test.ts:
import sinon from 'sinon';
import { main } from './';
describe('sinon fake vs stub', () => {
it('should pass when using a sinon stub', () => {
const callback = sinon.stub().returns('value');
const actual = main(callback);
sinon.assert.match(actual, 'value');
sinon.assert.calledOnce(callback);
});
it('should pass when using a sinon fake', () => {
const callback = sinon.fake.returns('value');
const actual = main(callback);
sinon.assert.match(actual, 'value');
sinon.assert.calledOnce(callback);
});
});
test results:
sinon fake vs stub
✓ should pass when using a sinon stub
✓ should pass when using a sinon fake
2 passing (9ms)
For sinon.fake.throws(value);, sinon.fake.resolves(value);, sinon.fake.yields([value1, ..., valueN]); APIs and so on. I can also use sinon.stubs() do these.
I use sinon.stubs() a lot, the documentation of Fakes doesn't give special scenes can only use fakes. I can currently test all scenarios using sinon.stubs().