import { configure, shallow } from 'enzyme'; import Adapter from 'enzyme-adapter-react-16'; import * as React from 'react'; import { Text } from 'react-native'; import renderer from 'react-test-renderer'; import MDSwiperItem from '../../swiper-item/index'; import MDSwiper from '../index.ios'; configure({ adapter: new Adapter() }); jest.useRealTimers(); const colors = [ { color: '#4390EE', text: '给时光以生命,给岁月以文明。', }, { color: '#364d79', text: '你的无畏来源于无知。', }, { color: '#CA4040', text: '一切都将逝去,只有死神永生。', }, ]; it('renders correctly with defaults', () => { const items = colors.map((item, index) => { return ( {item.text} ); }); const component = renderer.create( {items} ); expect(component.toJSON()).toMatchSnapshot(); component.unmount(); // call unmount to stop timer }); it('renders correctly with one item', () => { const component = renderer.create( Blank ); expect(component.toJSON()).toMatchSnapshot(); component.unmount(); // call unmount to stop timer }); it('renders correctly with empty children', () => { const component = renderer .create() .toJSON(); expect(component).toMatchSnapshot(); }); it('renders correctly with Vertical mode', () => { const items = colors.map((item, index) => { return ( {item.text} ); }); const component = renderer.create( {items} ); expect(component.toJSON()).toMatchSnapshot(); component.unmount(); // call unmount to stop timer }); it('renders correctly with Fade mode', () => { const items = colors.map((item, index) => { return ( {item.text} ); }); const component = renderer.create( {items} ); expect(component.toJSON()).toMatchSnapshot(); component.unmount(); // call unmount to stop timer }); it('test autoplay', async () => { const mockBeforeCallBack = jest.fn(); const mockAfterCallBack = jest.fn(); const items = colors.map((item, index) => { return ( {item.text} ); }); const component = shallow( {items} ); const calls: any = await new Promise((resolve) => setTimeout(() => { const instance: any = component.instance(); instance.stop(); // onMomentumScrollEnd not be called in jest // so onAfterChange not be emitted resolve(mockBeforeCallBack.mock.calls.length === 3); }, 4000) ); expect(calls).toEqual(true); }); it('test autoplay with Fade mode', async () => { const mockBeforeCallBack = jest.fn(); const mockAfterCallBack = jest.fn(); const items = colors.map((item, index) => { return ( {item.text} ); }); const component = shallow( {items} ); const calls: any = await new Promise((resolve) => setTimeout(() => { console.log(mockBeforeCallBack.mock.calls); console.log(mockAfterCallBack.mock.calls); const instance: any = component.instance(); instance.stop(); resolve( mockBeforeCallBack.mock.calls.length === 3 && mockAfterCallBack.mock.calls.length === 3 ); }, 4000) ); expect(calls).toEqual(true); }); it('test public method', () => { const items = colors.map((item, index) => { return ( {item.text} ); }); const component = shallow( {items} ); const instance: any = component.instance(); expect(instance.state.index).toEqual(1); // real item index instance.next(); expect(instance.state.index).toEqual(2); // real item index instance.next(); expect(instance.state.index).toEqual(3); // real item index instance.next(); expect(instance.state.index).toEqual(4); // real item index instance.next(); expect(instance.state.index).toEqual(1); // real item index instance.prev(); expect(instance.state.index).toEqual(0); // real item index instance.prev(); expect(instance.state.index).toEqual(4); // real item index instance.prev(); expect(instance.state.index).toEqual(3); // real item index instance.prev(); expect(instance.state.index).toEqual(2); // real item index instance.prev(); expect(instance.state.index).toEqual(1); // real item index instance.goto(2); expect(instance.state.index).toEqual(3); // real item index instance.goto(4); expect(instance.state.index).toEqual(3); // real item index instance.goto('a'); expect(instance.state.index).toEqual(3); // real item index instance.goto(-2); expect(instance.state.index).toEqual(3); // real item index expect(instance.getIndex()).toEqual(2); // original item index instance.stop(); expect(instance.state.timer).toEqual(null); instance.play(300); expect(instance.state.timer).toEqual(null); instance.play(5000); expect(instance.state.autoplay).toEqual(5000); instance.stop(); });