Я вообще не понимаю полезности насмешек. Смотрите, у меня есть следующий модуль:
function Code() {
this.generate = () => {
const result = 'code124';
return result;
};
}
module.exports = Code;
Теперь я хочу проверить это в шутку:
const Code = require('../lib/code');
jest.mock('../lib/code', () => {
return jest.fn().mockImplementation(() => {
return {
generate: () => [1, 2, 3]
};
});
});
describe('Code', () => {
test('returns the code "code123"', () => {
const code = new Code();
expect(code.generate()).toBe('code123');
});
});
Итак... Этот тест будет в порядке, но... Мой код не такой... какой смысл в насмешках, если я могу установить правильный результат, даже если мой код неверен?
Вы НЕТ должны издеваться над модулем, который тестируете. Вы должны издеваться над его зависимостями.
Например:
всякий раз, когда у вас есть зависимость в реализации:
const dependency = require('dependency');
function Code() {
this.generate = () => {
const result = 'code' + dependency.getNumber();
return result;
};
}
module.exports = Code;
вы сможете изменить его результаты, чтобы иметь возможность тестировать все сценарии без использования фактической реализации вашей зависимости:
const dependency = require('dependency');
const Code = require('../lib/code');
jest.mock('dependency');
describe('Code', () => {
describe('when dependency returns 123', () => {
beforeAll(() => {
dependency.getNumber.mockReturnValue('123');
});
it('should generate code123', () => {
const code = new Code();
expect(code.generate()).toEqual('code123');
});
});
describe('when dependency returns 124', () => {
beforeAll(() => {
dependency.getNumber.mockReturnValue('124');
});
it('should generate code123', () => {
const code = new Code();
expect(code.generate()).toEqual('code124');
});
});
});
Это имеет больше смысла для меня. Все гиды, которые я встречал о насмешках, делают то же самое, что и я, и для меня это не имеет смысла. Большое спасибо!
не уверен, что понимаю вопрос. в общем, пока вы тестируете один модуль, лучше издеваться над всеми его зависимостями. в вашем образце нет зависимостей, поэтому вам нечего издеваться.