如何对Ant Design的表单getFieldDecorator()进行存根处理?

Jay*_*Jay 5 reactjs antd

我正在尝试对表单进行简单的Jest快照测试,但是在运行测试时出现错误:

Uncaught [TypeError: getFieldDecorator(...) is not a function]
Run Code Online (Sandbox Code Playgroud)

我以为我可以为它创建一个存根getFieldDecorator并将其传递给道具,但这是行不通的。

这是测试:

  it('renders correctly initially', () => {

const testForm = {
  getFieldDecorator: jest.fn()
};

const wrapper = mount(
  <Router>
    <LoginForm form={testForm} />
  </Router>
);

expect(wrapper).toMatchSnapshot();
Run Code Online (Sandbox Code Playgroud)

});

这是我组件中的render()方法:

  render() {
const { form } = this.props;
const { getFieldDecorator } = form;

return (
  <Form onSubmit={this.handleSubmit} className="login-form">
    <FormItem>
      {getFieldDecorator('username', {
        rules: [{ required: true, message: 'Please enter your username!' }]
      })(
        <Input
          prefix={<Icon type="user" style={{ color: 'rgba(0,0,0,.25)' }} />}
          placeholder="Username"
        />
      )}
    </FormItem>
Run Code Online (Sandbox Code Playgroud)

我将组件导出为:

export default withRouter(Form.create()(LoginForm));
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 7

您使用的是正确的方法,唯一想念的是,该getFieldDecorator函数应该返回一个函数,因此您需要相应地模拟它,即:

const testForm = {
  getFieldDecorator: jest.fn( opts => c => c )
};
Run Code Online (Sandbox Code Playgroud)