【发布时间】:2018-09-14 20:41:28
【问题描述】:
我的应用程序有很多 redux-form。我正在使用 Jest 和 Enzyme 进行单元测试。但是,我无法测试 redux-form。我的组件是一个登录表单,例如:
import { login } from './actions';
export class LoginForm extends React.Component<any, any> {
onSubmit(values) {
this.props.login(values, this.props.redirectUrl);
}
render() {
const { handleSubmit, status, invalid } = this.props;
return (
<form onSubmit={handleSubmit(this.onSubmit.bind(this))}>
<TextField label="Email" name="email">
<TextField type="password" label="Password" name="password" autoComplete/>
<Button submit disabled={invalid} loading={status.loading}>
OK
</Button>
</form>
);
}
}
const mapStateToProps = (state) => ({
status: state.login.status,
});
const mapDispatchToProps = { login };
const form = reduxForm({ form: 'login' })(LoginForm);
export default connect(mapStateToProps, mapDispatchToProps)(form);
模拟商店,导入连接组件
redux-form 使用存储来维护表单输入。然后我使用redux-mock-store:
import ConnectedLoginForm from './LoginForm';
const configureStore = require('redux-mock-store');
const store = mockStore({});
const spy = jest.fn();
const wrapper = shallow(
<Provider store={store}>
<ConnectedLoginForm login={spy}/>
</Provider>);
wrapper.simulate('submit');
expect(spy).toBeCalledWith();
但是这样一来,submit就没有模拟出来,我的测试用例失败了:
预期的模拟函数已被调用:[] 但它没有被调用。
模拟商店,仅导入 React 组件。
我尝试从测试代码创建 redux 表单:
import { Provider } from 'react-redux';
import ConnectedLoginForm, { LoginForm } from './LoginForm';
const props = {
status: new Status(),
login: spy,
};
const ConnectedForm = reduxForm({
form: 'login',
initialValues: {
email: 'test@test.com',
password: '000000',
},
})(LoginForm);
const wrapper = shallow(
<Provider store={store}>
<ConnectedForm {...props}/>
</Provider>);
console.log(wrapper.html());
wrapper.simulate('submit');
expect(spy).toBeCalledWith({
email: 'test@test.com',
password: '000000',
});
在这种情况下,我仍然收到function not called 的错误。如果我添加console.log(wrapper.html()),则会出现错误:
不变违规:在上下文中找不到“商店”或 “Connect(ConnectedField)”的道具。要么将根组件包装在 a ,或明确地将“store”作为道具传递给 “连接(ConnectedField)”。
我在 redux-form 或 redux 或 jest/enzyme 甚至 Google 的官方网站上找不到文档。请帮忙,谢谢。
【问题讨论】:
标签: react-redux jestjs jsx redux-form enzyme