import React from 'react'; import ProForm, { ProFormUploadButton, ProFormUploadDragger } from '@ant-design/pro-form'; import { mount } from 'enzyme'; import mock from 'xhr-mock'; import { act } from 'react-dom/test-utils'; import { waitTime, waitForComponentToPaint } from '../util'; const mockFile = new File(['foo'], 'foo.png', { type: 'image/png', }); export function setup() { mock.setup(); // @ts-ignore mock.post('http://upload.com/', (req, res) => { req.headers({ 'content-length': '100', }); req.body('thisisbody'); return res; }); } export const teardown = mock.teardown.bind(mock); describe('ProFormUpload', () => { const errorSpy = jest.spyOn(console, 'error').mockImplementation(() => {}); beforeEach(() => setup()); afterEach(() => { teardown(); errorSpy.mockReset(); }); it('ProFormUploadButton support onChange', async () => { const fn = jest.fn(); const wrapper = mount( { fn(values.files); }} > , ); act(() => { wrapper.find('.ant-upload input').simulate('change', { target: { files: [mockFile], }, }); }); await waitTime(200); expect(fn).toBeCalled(); }); it('ProFormUploadButton support beforeUpload', async () => { const fn = jest.fn(); const wrapper = mount( { fn(values.files); }} > { return false; }, }} /> , ); act(() => { wrapper.find('.ant-upload input').simulate('change', { target: { files: [mockFile], }, }); }); await waitTime(200); act(() => { expect(wrapper.find('div.ant-upload-list-picture-container').length).toBe(0); }); }); it('ProFormUploadButton support disable', async () => { const wrapper = mount( , ); expect(wrapper.find('Upload Button')).toMatchSnapshot(); wrapper.setProps({ buttonProps: { disabled: true, type: 'dashed', }, }); await waitForComponentToPaint(wrapper); expect(wrapper.find('Upload Button')).toMatchSnapshot(); wrapper.setProps({ disabled: false, buttonProps: {}, fieldProps: { disabled: true, }, }); await waitForComponentToPaint(wrapper); expect(wrapper.find('Upload Button')).toMatchSnapshot(); }); it('ProFormUploadDragger support onChange', async () => { const fn = jest.fn(); const onChangeFn = jest.fn(); const wrapper = mount( { fn(values.files); }} > onChangeFn()} action="http://upload.com" label="upload" name="files" /> , ); act(() => { wrapper.find('.ant-upload input').simulate('change', { target: { files: [mockFile], }, }); }); await waitTime(200); expect(fn).toBeCalled(); expect(onChangeFn).toBeCalled(); }); it('ProFormUploadDragger hide when max', async () => { const wrapper = mount( // @ts-ignore , ); await waitTime(200); expect(wrapper.find('.ant-upload.ant-upload-drag').props().style?.display).toBe('none'); }); it('ProFormUploadButton hide when max', async () => { const wrapper = mount( // @ts-ignore , ); await waitTime(200); expect(wrapper.find('.anticon.anticon-upload').exists()).toBe(false); }); });