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 (
{dom}
); }} >
, ); 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', }, }); }); });