使用 Jest 和 Enzyme 测试 react-router v4
Testing react-router v4 with Jest and Enzyme
我有一个简单的应用程序,他们使用 react-router v4
const App = () => (
<Switch>
<Route exact path="/" component={() => <div>Home</div>}/>
<Route path="/profile" component={() => <div>Profile</div>}/>
<Route path="/help" component={() => <div>Help</div>}/>
</Switch>
);
并测试
jest.dontMock('../App');
import React from 'react';
import { MemoryRouter } from 'react-router-dom';
import { shallow } from 'enzyme';
import App from '../App';
describe('<App />', () => {
const wrapper = shallow(
<MemoryRouter>
<App/>
</MemoryRouter>
);
console.log(wrapper.html());
it('renders a static text', () => {
expect(
wrapper.contains(<div>Home</div>)
).toBe(true);
});
});
为什么这个测试失败了?
我的配置:
- 酶:2.8.2
- 反应脚本:1.0.7
- 反应测试渲染器:15.5.4
您必须提供 initialEntries
以及 initialIndex
。
在您的情况下,它应该如下所示:
const wrapper = shallow(
<MemoryRouter initialEntries={['/']} initialIndex={0}>
<App/>
</MemoryRouter>
);
另一种可能性是您需要 enzyme
的 mount
而不是 shallow
。
react-router
这里有一些很棒的文档:
https://reacttraining.com/react-router/core/api/MemoryRouter
我有一个简单的应用程序,他们使用 react-router v4
const App = () => (
<Switch>
<Route exact path="/" component={() => <div>Home</div>}/>
<Route path="/profile" component={() => <div>Profile</div>}/>
<Route path="/help" component={() => <div>Help</div>}/>
</Switch>
);
并测试
jest.dontMock('../App');
import React from 'react';
import { MemoryRouter } from 'react-router-dom';
import { shallow } from 'enzyme';
import App from '../App';
describe('<App />', () => {
const wrapper = shallow(
<MemoryRouter>
<App/>
</MemoryRouter>
);
console.log(wrapper.html());
it('renders a static text', () => {
expect(
wrapper.contains(<div>Home</div>)
).toBe(true);
});
});
为什么这个测试失败了?
我的配置:
- 酶:2.8.2
- 反应脚本:1.0.7
- 反应测试渲染器:15.5.4
您必须提供 initialEntries
以及 initialIndex
。
在您的情况下,它应该如下所示:
const wrapper = shallow(
<MemoryRouter initialEntries={['/']} initialIndex={0}>
<App/>
</MemoryRouter>
);
另一种可能性是您需要 enzyme
的 mount
而不是 shallow
。
react-router
这里有一些很棒的文档:
https://reacttraining.com/react-router/core/api/MemoryRouter