Jest - издеваться над заводской функцией - PullRequest
1 голос
/ 16 мая 2019

Я хочу проверить функцию 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);
  });
});

Ответы [ 2 ]

2 голосов
/ 20 мая 2019

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!
  });
});
0 голосов
/ 16 мая 2019

Вы можете использовать mockReturnValue(false) с шуткой для принудительного возврата значения в ваших тестах.

Так что в вашем коде это будет выглядеть примерно так:

...
brake: jest.fn().mockReturnValue(false),
...

Вот документация mockReturnValue() .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...