Подтвердить что ты не робот

Как изменить значение возвращаемой функции jest mock в каждом тесте?

У меня есть макетный модуль, подобный этому в моем тестовом файле компонента

  jest.mock('../../../magic/index', () => ({
    navigationEnabled: () => true,
    guidanceEnabled: () => true
  }));

эти функции будут вызываться в функции рендеринга моего компонента, чтобы скрыть и показать определенную функцию.

Я хочу сделать снимок в разных комбинациях возвращаемого значения этих макетных функций.

предположим, что у меня есть тестовый пример, подобный этому

 it('RowListItem should not render navigation and guidance options', () => {
    const wrapper = shallow(
      <RowListItem type="regularList" {...props} />
    );
    expect(enzymeToJson(wrapper)).toMatchSnapshot();
  });

для запуска этого тестового примера. Я хочу изменить функции модуля mock. Возвращает значения false так динамически

jest.mock('../../../magic/index', () => ({
    navigationEnabled: () => false,
    guidanceEnabled: () => false
  }));

потому что я импортирую компонент RowListItem уже один раз, чтобы мой модуль-макет снова не импортировал. поэтому он не изменится. как я могу это решить?

4b9b3361

Ответ 1

Вы можете издеваться над модулем, чтобы он возвращал шпионы и импортировал его в свой тест:

import {navigationEnabled, guidanceEnabled} from '../../../magic/index'

jest.mock('../../../magic/index', () => ({
    navigationEnabled: jest.fn(),
    guidanceEnabled: jest.fn()
}));

Затем вы можете изменить фактическую реализацию с помощью mockImplementation

navigationEnabled.mockImplementation(()=> true)
//or
navigationEnabled.mockReturnValueOnce(true);

и в следующем тесте

navigationEnabled.mockImplementation(()=> false)
//or
navigationEnabled.mockReturnValueOnce(false);

Ответ 2

что вы хотите сделать, это

import { navigationEnabled, guidanceEnabled } from '../../../magic/index';   

jest.mock('../../../magic/index', () => ({
  navigationEnabled: jest.fn(),
  guidanceEnabled: jest.fn()
}));

describe('test suite', () => {
  it('every test', () => {
    navigationEnabled.mockReturnValueOnce(value);
    guidanceEnabled.mockReturnValueOnce(value);
  });
});

Вы можете посмотреть больше об этих функциях здесь => https://facebook.github.io/jest/docs/mock-functions.html#mock-return-values

Ответ 3

У меня было трудное время получить принятые ответы на работу - мои эквиваленты navigationEnabled и guidanceEnabled были неопределенными, когда я попытался вызвать mockReturnValueOnce на них.

Вот что я должен был сделать:

В ../../../magic/__mocks__/index.js:

export const navigationEnabled = jest.fn();
export const guidanceEnabled = jest.fn();

в моем файле index.test.js:

jest.mock('../../../magic/index');
import { navigationEnabled, guidanceEnabled } from '../../../magic/index';
import { functionThatReturnsValueOfNavigationEnabled } from 'moduleToTest';

it('is able to mock', () => {
  navigationEnabled.mockReturnValueOnce(true);
  guidanceEnabled.mockReturnValueOnce(true);
  expect(functionThatReturnsValueOfNavigationEnabled()).toBe(true);
});