Я хочу проверить функцию createCarAndDrive()
, в которой используется модуль Car
.Я хотел бы смоделировать одну функцию в модуле 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);
});
});