Я использую хук UseHistory в реагировать маршрутизатор v5.1.2 с машинописью? При запуске юнит-теста у меня возникла проблема.
Ошибка типа: невозможно прочитать свойство 'history' из undefined.
import { mount } from 'enzyme';
import React from 'react';
import {Action} from 'history';
import * as router from 'react-router';
import { QuestionContainer } from './QuestionsContainer';
describe('My questions container', () => {
beforeEach(() => {
const historyHistory= {
replace: jest.fn(),
length: 0,
location: {
pathname: '',
search: '',
state: '',
hash: ''
},
action: 'REPLACE' as Action,
push: jest.fn(),
go: jest.fn(),
goBack: jest.fn(),
goForward: jest.fn(),
block: jest.fn(),
listen: jest.fn(),
createHref: jest.fn()
};//fake object
jest.spyOn(router, 'useHistory').mockImplementation(() =>historyHistory);// try to mock hook
});
test('should match with snapshot', () => {
const tree = mount(<QuestionContainer />);
expect(tree).toMatchSnapshot();
});
});
Также я попытался использовать, jest.mock('react-router', () =>({ useHistory: jest.fn() }));
но он все еще не работает.
reactjs
typescript
react-router
jestjs
enzyme
Иван Мартинюк
источник
источник
Вот более подробный пример, взятый из рабочего тестового кода (поскольку у меня были трудности с реализацией кода выше):
Component.js
Component.test.js
источник
В репозитории GitHact-router я обнаружил, что ловушка useHistory использует одноэлементный контекст, когда я начал использовать в монтировании MemoryRouter, он нашел контекст и начал работать. Так что исправь
источник