【发布时间】:2018-04-05 23:13:30
【问题描述】:
我正在尝试对使用 react-create-app 创建的新项目进行测试。现在似乎正在使用 React 16 和 Jest 3(据说有一些重大变化,或者可能是 enzime)。我收到与此帖子类似的错误TypeError: dispatch is not a function when I try to test a method using JEST
TypeError: dispatch is not a function 在 App.componentDidMount (src/components/App.js:21:68)
import React from 'react';
import { Provider } from 'react-redux';
import { mount } from 'enzyme';
import { App } from '../components/App';
import configureStore from '../state/store/configureStore';
window.store = configureStore({
slider: {
mainImageIndex: 0,
pageNum: 1,
perPage: 4,
},
});
const appTest = (
<Provider store={window.store}>
<App />
</Provider>
);
describe('App', () => {
it('should render without crashing', () => {
mount(appTest);
});
});
最初我只是尝试这样做:
import React from 'react';
import { mount } from 'enzyme';
import { App } from '../components/App';
describe('App', () => {
it('should render without crashing', () => {
mount(<App />);
});
});
这引发了这个错误
不变违规:在“Connect(Form(SearchForm))”的上下文或道具中找不到“store”。要么将根组件包装在 a 中,要么将“store”作为道具显式传递
App.js 代码:
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { searchPhotos } from '../state/actions/searchPhotos';
import { setMainImageIndex, setFirstPage } from '../state/actions/slider';
import Slider from './Slider';
import SearchForm from './SearchForm';
import Error from './Error';
import '../styles/App.css';
export class App extends Component {
componentDidMount() {
const { dispatch } = this.props;
dispatch(searchPhotos(window.store));
}
searchPhotosSubmit = () => {
const { dispatch } = this.props;
dispatch(setFirstPage());
dispatch(setMainImageIndex(0));
dispatch(searchPhotos(window.store));
}
render() {
const { fetchError } = this.props;
return (
<div className="App">
<header className="App-header">
<h1 className="App-title">Flickr Slider in React.js</h1>
<SearchForm onSubmit={this.searchPhotosSubmit} />
</header>
{!fetchError ? <Slider /> : <Error />}
</div>
);
}
}
export default connect(state => ({
fetchError: state.fetchError,
form: state.form,
slider: state.slider,
}))(App);
【问题讨论】:
-
能否包含
App组件代码? -
@BartekFryzowicz 感谢您的关注,上面添加了应用程序代码。其余代码在这里:github.com/pixelwiz/reactjs-flickr-slider-search
标签: reactjs redux react-redux jestjs enzyme