![](/img/trans.png)
[英]Mocking multiple named exports in jest.mock(moduleName, factory) factory function
[英]Jest - Mocking a factory function
我要测试的功能是使用Car
模块的createCarAndDrive()
。 我想在Car
模块中模拟一个功能,所以它的实际功能不是调用而是模拟功能。
因此, Car
函数返回两个函数gas()
和brake()
。 使用工厂功能模式实现Car
。 因此,这两个函数都包装在Car
,直到调用Car
时才公开。
是否有可能模拟函数brake()
返回false
?
这是实现。
// Car.js function Car({ name, model }) { function gas(speed) { return `${name} ${model} goes forward at a speed of ${speed}km/h`; } function brake() { return true; } return { gas, brake, }; } // driver.js function createCarAndDrive() { const car = Car({ name: 'Fiat', model: 'Punto' }); car.gas(123); return car.brake(); } // driver.test.js describe('drive', () => { beforeEach(() => { // How to mock function inside a function? jest.mock('./Car', () => ({ brake: jest.fn().mockImplementation(() => false), })); }); test('it should not brake', () => { const itHitBreak = createCarAndDrive(); expect(itHitBreak).toBe(false); }); });
jest.mock
工厂功能在测试功能中不起作用 。
将jest.mock
移至jest.mock
的顶级范围,它应该可以工作:
import { createCarAndDrive } from './driver';
jest.mock('./Car', () => ({
Car: () => ({
gas: () => 'mock gas',
brake: () => false
})
}));
describe('drive', () => {
test('it should not brake', () => {
const itHitBreak = createCarAndDrive();
expect(itHitBreak).toBe(false); // Success!
});
});
您可以使用mockReturnValue(false)
嘲笑来强制返回值在测试中。
因此,在您的代码中它将看起来像:
...
brake: jest.fn().mockReturnValue(false),
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.