Jestjs 通过开玩笑了解mock的实用性
我完全不能理解嘲弄的效用。看,我有下一个模块:Jestjs 通过开玩笑了解mock的实用性,jestjs,Jestjs,我完全不能理解嘲弄的效用。看,我有下一个模块: function Code() { this.generate = () => { const result = 'code124'; return result; }; } module.exports = Code; 现在,我想用笑话来测试它: const Code = require('../lib/code'); jest.mock('../lib/code', () => { return j
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');
});
});
});
我不知道我是否明白这个问题。通常,在测试一个模块时,最好模拟它的所有依赖项。在您的示例中,没有依赖项,因此您没有任何可模仿的内容。这对我来说更有意义。我看到的所有关于嘲弄的指南都和我做的一样,对我来说毫无意义。谢谢!