import React, { Component } from 'react'; import { render, mount } from 'enzyme'; import renderer from 'react-test-renderer'; import Button from '..'; import Icon from '../../icon'; describe('Button', () => { it('renders correctly', () => { const wrapper = render(); expect(wrapper).toMatchSnapshot(); }); it('mount correctly', () => { if (process.env.REACT === '15') { return; } expect(() => renderer.create()).not.toThrow(); }); it('renders Chinese characters correctly', () => { const wrapper = render(); expect(wrapper).toMatchSnapshot(); // should not insert space when there is icon const wrapper1 = render(); expect(wrapper1).toMatchSnapshot(); // should not insert space when there is icon const wrapper2 = render( , ); expect(wrapper2).toMatchSnapshot(); // should not insert space when there is icon const wrapper3 = render(); expect(wrapper3).toMatchSnapshot(); // should not insert space when there is icon while loading const wrapper4 = render( , ); expect(wrapper4).toMatchSnapshot(); // should insert space while loading const wrapper5 = render(); expect(wrapper5).toMatchSnapshot(); }); it('renders Chinese characters correctly in HOC', () => { const Text = ({ children }) => {children}; const wrapper = mount( , ); expect(wrapper.find('.ant-btn').hasClass('ant-btn-two-chinese-chars')).toBe(true); wrapper.setProps({ children: 大按钮, }); wrapper.update(); expect(wrapper.find('.ant-btn').hasClass('ant-btn-two-chinese-chars')).toBe(false); wrapper.setProps({ children: 按钮, }); wrapper.update(); expect(wrapper.find('.ant-btn').hasClass('ant-btn-two-chinese-chars')).toBe(true); }); it('have static property for type detecting', () => { const wrapper = mount(); // eslint-disable-next-line expect(wrapper.type().__ANT_BUTTON).toBe(true); }); it('should change loading state instantly by default', () => { class DefaultButton extends Component { state = { loading: false, }; enterLoading = () => { this.setState({ loading: true }); }; render() { const { loading } = this.state; return ( ); } } const wrapper = mount(); wrapper.simulate('click'); expect(wrapper.find('.ant-btn-loading').length).toBe(1); }); it('should change loading state with delay', () => { // eslint-disable-next-line class DefaultButton extends Component { state = { loading: false, }; enterLoading = () => { this.setState({ loading: { delay: 1000 } }); }; render() { const { loading } = this.state; return ( ); } } const wrapper = mount(); wrapper.simulate('click'); expect(wrapper.hasClass('ant-btn-loading')).toBe(false); }); it('should support link button', () => { const wrapper = mount( , ); expect(wrapper.render()).toMatchSnapshot(); }); it('fixbug renders {0} , 0 and {false}', () => { const wrapper = render(); expect(wrapper).toMatchSnapshot(); const wrapper1 = render(); expect(wrapper1).toMatchSnapshot(); const wrapper2 = render(); expect(wrapper2).toMatchSnapshot(); }); it('should has click wave effect', async () => { const wrapper = mount(); wrapper .find('.ant-btn') .getDOMNode() .click(); await new Promise(resolve => setTimeout(resolve, 0)); expect(wrapper.render()).toMatchSnapshot(); }); it('should not render as link button when href is undefined', async () => { const wrapper = mount( , ); expect(wrapper.render()).toMatchSnapshot(); }); });