import React from 'react'; import Steps from '..'; import type { StepsProps } from '..'; import { GetProp } from '../../_util/type'; import { resetWarned } from '../../_util/warning'; import mountTest from '../../../tests/shared/mountTest'; import rtlTest from '../../../tests/shared/rtlTest'; import { fireEvent, render, screen, waitFakeTimer } from '../../../tests/utils'; import ConfigProvider from '../../config-provider'; describe('Steps', () => { mountTest(Steps); rtlTest(Steps); beforeEach(() => { resetWarned(); jest.useFakeTimers(); }); afterEach(() => { jest.clearAllTimers(); jest.useRealTimers(); }); const description = 'This is a description.'; it('should render correct', () => { const { container } = render( , ); expect(container.firstChild).toMatchSnapshot(); }); it('items out of render function', () => { const items = [ { title: '已完成', }, { title: '进行中', }, { title: '待运行', description: 'Hello World!', }, { title: '待运行', }, ]; const ControlSteps = () => { const [current, setCurrent] = React.useState(0); return ( { setCurrent(val); }} items={items} /> ); }; const { container } = render(); expect( container.querySelectorAll('.ant-steps-item')[1].classList.contains('ant-steps-item-process'), ).toBe(false); fireEvent.click(screen.getByText(/进行中/)); expect( container.querySelectorAll('.ant-steps-item')[1].classList.contains('ant-steps-item-process'), ).toBe(true); }); it('deprecated warning', () => { const errorSpy = jest.spyOn(console, 'error').mockImplementation(() => {}); const { container } = render( , ); expect(container.querySelectorAll('.ant-steps-item')).toHaveLength(1); expect(errorSpy).toHaveBeenCalledWith( 'Warning: [antd: Steps] `direction` is deprecated. Please use `orientation` instead.', ); expect(errorSpy).toHaveBeenCalledWith( 'Warning: [antd: Steps] `items.description` is deprecated. Please use `items.content` instead.', ); expect(errorSpy).toHaveBeenCalledWith( 'Warning: [antd: Steps] `progressDot` is deprecated. Please use `type="dot"` instead.', ); expect(errorSpy).toHaveBeenCalledWith( 'Warning: [antd: Steps] `labelPlacement` is deprecated. Please use `titlePlacement` instead.', ); errorSpy.mockRestore(); }); it('Steps should inherit the size from ConfigProvider if the componentSize is set ', () => { const { container } = render( , ); expect(container.querySelectorAll('.ant-steps-small')).toHaveLength(1); }); it('no tooltip if inline item not have content', async () => { const { container } = render( , ); // First fireEvent.mouseEnter(container.querySelectorAll('.ant-steps-item')[0]); await waitFakeTimer(); expect(document.querySelector('.ant-tooltip')).toBeFalsy(); // Second fireEvent.mouseEnter(container.querySelectorAll('.ant-steps-item')[1]); await waitFakeTimer(); expect(document.querySelector('.ant-tooltip')).toBeTruthy(); }); it('iconRender', () => { let renderInfo: Parameters>[1]; const iconRender = jest.fn((node, info) => { renderInfo = info; return
{node}
; }); const item = { title: 'bamboo', subTitle: 'little', description: 'light', }; const { container } = render(); expect(container.querySelector('.bamboo')).toBeTruthy(); expect(container.querySelector('.ant-steps-item-icon')).toBeTruthy(); expect(renderInfo!).toEqual({ index: 0, active: true, item: { ...item, content: 'light', status: 'process', }, }); }); });