sinon.stub
заменяет свойство объекта ...
... и часто объект является модулем , а свойство является функцией, которую экспортирует модуль .
Если для экспорта модуля функции задан меткой, любой код, вызывающий экспорт модуля функции, будет вызывать заглушку.
Невозможно заглушить someFunction
в приведенном выше коде, поскольку processListOfItems
не вызывает экспорт модуля из someFunction
, он вызывает someFunction
напрямую.
processListOfItems
необходимо вызвать экспорт модуля из someFunction
, чтобы иметь возможность заблокировать вызов.
Вот простой примерпродемонстрировать использование синтаксиса модуля Node.js:
util.js
exports.func1 = () => {
return 'hello ' + exports.func2(); // <= use the module
}
exports.func2 = () => 'world';
util.test.js
const sinon = require('sinon');
const util = require('./util');
describe('func1', () => {
it('should work', () => {
const stub = sinon.stub(util, 'func2').returns('everyone');
expect(util.func1()).toBe('hello everyone'); // Success!
});
});
... и вотпростой пример использования синтаксиса модуля ES6:
util.js
import * as util from './util'; // <= import module into itself
export const func1 = () => {
return 'hello ' + util.func2(); // <= use the module
}
export const func2 = () => 'world';
util.test.js
import * as sinon from 'sinon';
import * as util from './util';
describe('func1', () => {
it('should work', () => {
const stub = sinon.stub(util, 'func2').returns('everyone');
expect(util.func1()).toBe('hello everyone'); // Success!
});
});
Обратите внимание, что модули ES6 можно импортировать в себя, так как они "поддержка циклического депоendencies автоматически ".