使用 create-react-app
创建了一个简单的应用程序,然后更新了我的 App.js 并添加了 redux/store。
class App extends Component {
render() {
return (
<header className="header">
<h1>todos</h1>
</header>
);
}
}
function mapStateToProps(state) {
return {
data: state.data
};
}
function mapDispatchToProps(dispatch) {
return bindActionCreators(ActionCreators, dispatch);
}
export default connect(mapStateToProps, mapDispatchToProps)(App);
然后尝试使用 Enzyme 和 Jest 在 App.test.js 上测试我的应用程序。
import React from 'react'
import Enzyme, { mount } from 'enzyme'
import Adapter from 'enzyme-adapter-react-16';
import App from './App'
Enzyme.configure({ adapter: new Adapter() });
function setup() {
const props = {
addTodo: jest.fn()
}
const enzymeWrapper = mount(<App {...props} />)
return {
props,
enzymeWrapper
}
}
describe('components', () => {
describe('App', () => {
it('should render self and subcomponents', () => {
const { enzymeWrapper } = setup()
expect(enzymeWrapper.find('header')).toBe(true)
})
})
})
但抛出错误:不变违规:在“Connect(App)”的上下文或 Prop 中找不到“store”。将根组件包装在 中,或者将“store”作为 prop 显式传递给“Connect(App)”。
有什么想法吗?
最佳答案
发生这种情况是因为您尝试在没有 <Provider>
的情况下测试组件(这通常会使商店对其子组件可用)。
在这种情况下,我通常做的是在没有 Redux 的情况下测试我的组件 connect
捆绑。为此,您可以导出 App
组件本身:
export class App extends Component // etc...
然后使用解构赋值语法将其导入到测试文件中:
import { App } from './App'
您可以假设(希望...;))Redux 和 React 绑定(bind)已由其创建者进行了正确测试,并将时间花在测试您自己的代码上。
Redux docs中有更多关于此的信息。 .
关于reactjs - React、Jest、Enzyme 如何通过 store redux 通过测试 App.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49373836/