繁体   English   中英

开玩笑-模拟工厂功能

[英]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),
...

这是mockReturnValue()文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM