Написание jest-тестов для antd FormItem

#reactjs #forms #jestjs #antd

#reactjs #формы #jestjs #antd

Вопрос:

Я пытаюсь написать тесты jest для своего компонента, который использует antd, который использует форму. Вставка фрагмента кода.

Component.tsx:

 render() {
const { Option } = Select;

return (
  <div>
    <Form
      ref={this.formRef}
      {...formItemLayout}
      onFinish={(values) => {this.props.onSubmit(values)}
    >
          <Form.Item
            name="foo"
            label="Foo"
            hasFeedback
            rules={[
              { required: true, message: 'Foo is required' },
              () => ({
                validator(rule, value) {
                  if(!isUniqueFoo(value)) {
                    return Promise.reject(new Error('wrong foo'));
                  }
                  if (value.length > 10) {
                    return Promise.reject(new Error('too many characters'));
                  }
                  return Promise.reject(new Error('something went wrong')));
                }
              })
            ]}
          >
            <Input type="text" />
          </Form.Item>
          <Form.Item
            name="bar"
            label="Bar"
            hasFeedback
            rules={[
              { required: true, message: 'bar is required' },
              () => ({
                validator(rule, value) {
                  if (isValidInput(value)) {
                    return Promise.resolve();
                  }
                  return Promise.reject(new Error('wrong value')));
                }
              })
            ]}
          >
            <Input />
          </Form.Item>
          <Form.Item
            name="baz"
            label="Baz"
          >
            <Select
              showSearch
              className="select-dropdown"
              optionFilterProp="children"
              onChange={this.onChange}
            >
              {data.map((d: Data) => (
                <Option key={d.id} value={d.id}>{d.name}</Option>
              ))
              }
            </Select>
          </Form.Item>
        </>
      )}
    </Form>
  </div>
}
 

Пытаюсь написать Jest-тесты для этого вышеуказанного компонента.
Это тест, который работает:

 it('test', () => {
  const onSubmit = jest.fn();
  const wrapper = shallow(<Component {...defaultProps} onSubmit={onSubmit} />);
  wrapper.find('ForwardRef(InternalForm)').props().onFinish(values);
  expect(onSubmit).toHaveBeenCalledWith({
    ...defaultProps.baz,
    // Changed items.
    foo: 'test',
    bar: 'other test'
  });
});
 

Хотя приведенный выше тест работает, я хотел бы протестировать другие вещи, такие как проверки. Ни один из этих фрагментов кода не работает. Я пытаюсь проверить, введено ли поле ‘Foo’, а длина текста составляет <10 символов и проверяется и т. Д.

 console.log("test1", wrapper.find('ForwardRef(InternalForm)').shallow().find('Input'));
console.log("test2", wrapper.find('ForwardRef(InternalForm)').find('Input'));
console.log("test3", wrapper.find('Input'));

 

Еще одна вещь, которая меня раздражает, — это необходимость использовать wrapper.find(‘forwardRef(InternalForm)’) вместо wrapper.find(‘Form’)

Есть мысли?