Как изменить значение возвращаемой функции 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
уже один раз, чтобы мой модуль-макет снова не импортировал. поэтому он не изменится. как я могу это решить?
Ответы
Ответ 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);
});