import { mount } from 'enzyme';
import React from 'react';
import { Button } from 'antd';
import { act } from 'react-dom/test-utils';
import type { StepsFormProps } from '@ant-design/pro-form';
import { StepsForm, ProFormText } from '@ant-design/pro-form';
import { waitForComponentToPaint } from '../util';
describe('StepsForm', () => {
it('🐲 basic use', async () => {
const html = mount(
,
);
await waitForComponentToPaint(html);
expect(html.find('span.ant-steps-icon').length).toBe(3);
expect(html.find('div.ant-steps-item-title').at(0).text()).toBe('表单1');
expect(html.find('div.ant-steps-item-title').at(1).text()).toBe('表单2');
expect(html.find('div.ant-steps-item-title').at(2).text()).toBe('表单3');
await waitForComponentToPaint(html, 100);
act(() => {
html.unmount();
});
});
it('🐲 stepsRender', async () => {
const html = mount(
null}>
,
);
await waitForComponentToPaint(html);
expect(html.find('.ant-steps').exists()).toBeFalsy();
act(() => {
html.setProps({
stepsRender: (_, dom) => {dom}
,
});
});
await waitForComponentToPaint(html, 100);
expect(html.find('.ant-steps').exists()).toBeTruthy();
expect(html.find('div#test').exists()).toBeTruthy();
await waitForComponentToPaint(html, 100);
act(() => {
html.unmount();
});
});
it('🐲 pre button ', async () => {
const onCurrentChange = jest.fn();
const html = mount(
{
onCurrentChange(current);
}}
>
,
);
await waitForComponentToPaint(html, 100);
act(() => {
html.find('button.ant-btn').at(0).simulate('click');
});
expect(onCurrentChange).toBeCalledWith(0);
await waitForComponentToPaint(html, 100);
act(() => {
html.unmount();
});
});
it('🐲 async onFinish', async () => {
const fn = jest.fn();
const currentFn = jest.fn();
const onFinish = jest.fn();
const html = mount(
{
fn(values);
return true;
}}
>
,
);
await waitForComponentToPaint(html);
act(() => {
html.find('button.ant-btn.ant-btn-primary').simulate('click');
});
await waitForComponentToPaint(html);
expect(fn).toBeCalled();
expect(currentFn).toBeCalled();
act(() => {
html.find('button.ant-btn.ant-btn-primary').simulate('click');
});
await waitForComponentToPaint(html);
expect(onFinish).toBeCalled();
await waitForComponentToPaint(html);
expect(fn).toBeCalled();
expect(currentFn).toBeCalled();
await waitForComponentToPaint(html, 100);
act(() => {
html.unmount();
});
});
it('🐲 submit when onFinish is null', async () => {
const fn = jest.fn();
const currentFn = jest.fn();
const html = mount(
{
fn(values);
return true;
}}
>
,
);
await waitForComponentToPaint(html);
act(() => {
html.find('button.ant-btn.ant-btn-primary').simulate('click');
});
await waitForComponentToPaint(html);
expect(fn).toBeCalled();
expect(currentFn).toBeCalled();
await waitForComponentToPaint(html);
act(() => {
html.unmount();
});
});
it('🐲 onFinish return true', async () => {
const fn = jest.fn();
const currentFn = jest.fn();
const html = mount(
{
currentFn(c);
}}
onFinish={async (values) => {
fn(values);
return true;
}}
>
,
);
await waitForComponentToPaint(html);
act(() => {
html.find('button.ant-btn.ant-btn-primary').simulate('click');
});
await waitForComponentToPaint(html);
act(() => {
html.find('button.ant-btn.ant-btn-primary').simulate('click');
});
expect(fn).toBeCalled();
expect(currentFn).toBeCalledWith(0);
await waitForComponentToPaint(html, 1200);
act(() => {
html.unmount();
});
});
it('🐲 onFinish throw error', async () => {
const currentFn = jest.fn();
const html = mount(
{
currentFn(c);
}}
onFinish={async () => {
throw new Error('发生了错误');
}}
>
,
);
await waitForComponentToPaint(html);
act(() => {
html.find('button.ant-btn.ant-btn-primary').simulate('click');
});
await waitForComponentToPaint(html);
expect(currentFn).not.toBeCalledWith(0);
act(() => {
html.unmount();
});
});
it('🐲 submitter render=false', () => {
const html = mount(
,
);
expect(html.find('button.ant-btn.ant-btn-primary').exists()).toBeFalsy();
});
it('🐲 submitter render props', async () => {
const fn = jest.fn();
const html = mount(
fn(current)}
submitter={{
render: (props) => {
return (
);
},
}}
>
,
);
await waitForComponentToPaint(html);
expect(html.find('button#rest').exists()).toBeTruthy();
act(() => {
html.find('button#rest').simulate('click');
});
await waitForComponentToPaint(html);
expect(fn).toBeCalledWith(0);
await waitForComponentToPaint(html);
act(() => {
html.unmount();
});
});
it('🐲 current min=0', async () => {
const fn = jest.fn();
const html = mount(
{
fn(current);
}}
submitter={{
render: (props) => {
return (
);
},
}}
>
,
);
await waitForComponentToPaint(html);
/** 因为上一步有限制,所以应该不触发 */
act(() => {
html.find('button#rest').simulate('click');
});
await waitForComponentToPaint(html);
expect(fn).toBeCalledTimes(0);
await waitForComponentToPaint(html);
act(() => {
html.unmount();
});
});
it('🐲 current max=1', async () => {
const fn = jest.fn();
const html = mount(
{
fn(current);
}}
submitter={{
render: (props) => {
return (
);
},
}}
>
,
);
await waitForComponentToPaint(html);
/** 因为下一步有限制,所以应该不触发 */
act(() => {
html.find('button#rest').simulate('click');
});
await waitForComponentToPaint(html);
expect(fn).toBeCalledTimes(0);
await waitForComponentToPaint(html);
act(() => {
html.unmount();
});
});
it('🐲 submitter=false', async () => {
const html = mount(
,
);
await waitForComponentToPaint(html);
expect(
html.find('.ant-pro-steps-form-step-active button.ant-btn.ant-btn-primary').exists(),
).toBeFalsy();
await waitForComponentToPaint(html, 100);
act(() => {
html.unmount();
});
});
it('🐲 submitter render function', async () => {
const html = mount(
{
return (
);
},
}}
>
,
);
expect(html.find('button#next').exists()).toBeTruthy();
await waitForComponentToPaint(html, 100);
act(() => {
html.unmount();
});
});
it('🐲 support stepsFormRender', async () => {
const html = mount(
{
return (
);
}}
>
,
);
await waitForComponentToPaint(html);
expect(html.find('#content form').length).toBe(2);
expect(html.find('#content form').exists()).toBeTruthy();
expect(html.find('#footer button').exists()).toBeTruthy();
await waitForComponentToPaint(html);
act(() => {
html.unmount();
});
});
it('🐲 support stepsFormRender', async () => {
const html = mount(
{
return {dom}
;
}}
>
,
);
await waitForComponentToPaint(html);
expect(html.find('#content').length).toBe(1);
expect(html.find('form #content').length).toBe(1);
expect(html.find('form').length).toBe(2);
expect(html.find('form #content').exists()).toBeTruthy();
await waitForComponentToPaint(html);
act(() => {
html.unmount();
});
});
it('🐲 support deepmerge form value', async () => {
const submit = jest.fn(() => Promise.resolve());
const html = mount(
{
return {dom}
;
}}
onFinish={submit}
>
,
);
await waitForComponentToPaint(html);
act(() => {
html.find('button.ant-btn.ant-btn-primary').simulate('click');
});
await waitForComponentToPaint(html);
act(() => {
html.find('button.ant-btn.ant-btn-primary').simulate('click');
});
await waitForComponentToPaint(html);
expect(submit).toBeCalledWith({
info: {
name: 'chenshuai',
age: '22',
},
});
});
});