import Switch from '../index'; // import { shallow, mount } from 'enzyme'; // import Enzyme, { shallow, render, mount } from 'enzyme'; // import Adapter from 'enzyme-adapter-react-16'; // Enzyme.configure({ // adapter: new Adapter() // }); import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants'; import { wrap } from 'lodash'; let CHECKED_CLS = `.${BASE_CLASS_PREFIX}-switch-checked`; describe('Switch', () => { it('switch with custom className & style', () => { const wrapper = mount(); expect(wrapper.hasClass('test')).toEqual(true); expect(wrapper.find('div.test')).toHaveStyle('color', 'red'); wrapper .find('input') .first() .simulate('change', { target: { checked: true, }, }); wrapper.unmount(); }); it('switch checkedText / unchekcedText', () => { const checkSwitch = mount(); const unCheckSwitch = mount(); expect(checkSwitch.find('.semi-switch-checked-text').text()).toEqual('semi'); expect(unCheckSwitch.find('.semi-switch-unchecked-text').text()).toEqual('design'); }); it('switch disabled when props.disabled', () => { const wrapperUnchecked = mount(); expect(wrapperUnchecked.exists(`.semi-switch-disabled`)).toEqual(true); expect(wrapperUnchecked.state('nativeControlDisabled')).toEqual(true); wrapperUnchecked.setProps({ disabled: false }); wrapperUnchecked.update(); expect(wrapperUnchecked.exists(`.semi-switch-disabled`)).toEqual(false); expect(wrapperUnchecked.state('nativeControlDisabled')).toEqual(false); const wrapperChecked = mount(); expect(wrapperChecked.exists(CHECKED_CLS)).toEqual(true); expect(wrapperChecked.exists(`.semi-switch-disabled`)).toEqual(true); expect(wrapperChecked.state('nativeControlDisabled')).toEqual(true); wrapperChecked.setProps({ disabled: false }) wrapperChecked.update(); expect(wrapperChecked.exists(`.semi-switch-disabled`)).toEqual(false); expect(wrapperChecked.state('nativeControlDisabled')).toEqual(false); }); it('switch onChange', () => { let onChange = () => {}; let spyChange = sinon.spy(onChange); const wrapper = mount(); let input = wrapper.find('input').first(); let event = { target: { checked: true }}; input.simulate('change', event) expect(spyChange.calledOnce).toEqual(true); expect(spyChange.calledWithMatch(true)).toEqual(true); }); it('switch onMouseEnter / onMouseLeave', () => { let onMouseEnter = () => {}; let onMouseLeave = () => {}; let spyEnter = sinon.spy(onMouseEnter); let spyLeave = sinon.spy(onMouseLeave); const wrapper = mount(); const div = wrapper.find('div.semi-switch').first(); div.simulate('mouseEnter', {}); expect(spyEnter.calledOnce).toEqual(true); div.simulate('mouseLeave', {}); expect(spyLeave.calledOnce).toEqual(true); }); it('switch size', () => { const largeSwitch = shallow(); const defaultSwitch = shallow(); const smallSwitch = shallow(); expect(smallSwitch.exists('.semi-switch-small')).toEqual(true); expect(defaultSwitch.exists('.semi-switch-small')).toEqual(false); expect(defaultSwitch.exists('.semi-switch-large')).toEqual(false); expect(largeSwitch.exists('.semi-switch-large')).toEqual(true); }); it('switch controlled mode', () => { let checked = false; let onChange = val => { checked = val; }; const spy = sinon.spy(onChange); let wrapper = mount(); expect(wrapper.exists(CHECKED_CLS)).toEqual(false); wrapper .find('input') .first() .simulate('change', { target: { checked: true, }, }); expect(spy.calledOnce).toBe(true); expect(checked === true).toEqual(true); // !!!important,在回调函数中修改了props.checke的值,不会在已monted的wrapper中生效,需要手动更新一次 wrapper.setProps({ checked: true }); // 更新了props之后,实际上在Symbol(enzyme.__node__).rendered.instance.className已有对应的CHECKED_CLS存在, // 但不知道为啥,必须手动触发一次update之后,调用exists后才是true,很奇怪 wrapper.update(); expect(wrapper.exists(CHECKED_CLS)).toEqual(true); }); it('switch with loading', () => { const wrapperLoading = shallow(); expect(wrapperLoading.exists(`.${BASE_CLASS_PREFIX}-switch-loading`)).toEqual(true); const wrapper = shallow(); expect(wrapper.exists(`.${BASE_CLASS_PREFIX}-switch-loading`)).toEqual(false); }); });