import Vue from 'vue'; import Tab from '..'; import Tabs from '../../tabs'; import { mount, later, triggerDrag, mockScrollTop } from '../../../test'; Vue.use(Tab); Vue.use(Tabs); function createWrapper(options = {}) { return mount({ template: ` ${options.extraTemplate || ''} Text Text Text `, data() { return { color: '#ee0a24', type: 'line', sticky: true, lineWidth: 2, lazyRender: true }; }, ...options }); } test('click to switch tab', async () => { const onChange = jest.fn(); const wrapper = mount({ template: ` Text Text Text `, methods: { onChange } }); await later(); expect(wrapper).toMatchSnapshot(); const tabs = wrapper.findAll('.van-tab'); tabs.at(1).trigger('click'); tabs.at(2).trigger('click'); await later(); expect(wrapper).toMatchSnapshot(); expect(onChange).toHaveBeenCalledTimes(1); }); test('swipe to switch tab', async () => { const onChange = jest.fn(); const wrapper = mount({ template: ` Text Text Text `, methods: { onChange } }); const content = wrapper.find('.van-tabs__content'); await later(); expect(wrapper).toMatchSnapshot(); triggerDrag(content, -100, 0); expect(wrapper).toMatchSnapshot(); expect(onChange).toHaveBeenCalledTimes(1); expect(onChange).toHaveBeenCalledWith(1, 'title2'); triggerDrag(content, -100, 0); expect(onChange).toHaveBeenCalledTimes(1); expect(wrapper).toMatchSnapshot(); await later(); wrapper.destroy(); }); test('change tabs data', async () => { const wrapper = createWrapper(); await later(); expect(wrapper).toMatchSnapshot(); wrapper.setData({ swipeable: false, sticky: false, type: 'card', color: 'blue' }); await later(); expect(wrapper).toMatchSnapshot(); }); test('lazy render', async () => { const wrapper = createWrapper(); expect(wrapper).toMatchSnapshot(); wrapper.setData({ lazyRender: false }); await later(); expect(wrapper).toMatchSnapshot(); }); test('render nav-left & nav-right slot', async () => { const wrapper = createWrapper({ extraTemplate: ` ` }); expect(wrapper).toMatchSnapshot(); }); test('border props', async () => { const wrapper = mount(Tabs, { propsData: { border: false } }); expect(wrapper).toMatchSnapshot(); }); test('click event', async () => { const onClick = jest.fn(); const onDisabled = jest.fn(); const wrapper = mount({ template: ` Text Text `, methods: { onClick, onDisabled } }); const tabs = wrapper.findAll('.van-tab'); tabs.at(0).trigger('click'); expect(onClick).toHaveBeenCalledWith(0, 'title1'); tabs.at(1).trigger('click'); expect(onDisabled).toHaveBeenCalledWith(1, 'title2'); }); test('name prop', async () => { const onClick = jest.fn(); const onChange = jest.fn(); const onDisabled = jest.fn(); const wrapper = mount({ template: ` Text Text Text `, methods: { onClick, onChange, onDisabled } }); await later(); expect(wrapper).toMatchSnapshot(); const tabs = wrapper.findAll('.van-tab'); tabs.at(1).trigger('click'); expect(onClick).toHaveBeenCalledWith('b', 'title2'); expect(onChange).toHaveBeenCalledWith('b', 'title2'); expect(onChange).toHaveBeenCalledTimes(1); tabs.at(2).trigger('click'); expect(onDisabled).toHaveBeenCalledWith('c', 'title3'); expect(onChange).toHaveBeenCalledTimes(1); }); test('set name to zero', async () => { const onClick = jest.fn(); const wrapper = mount({ template: ` Text Text `, methods: { onClick } }); const tabs = wrapper.findAll('.van-tab'); tabs.at(1).trigger('click'); expect(onClick).toHaveBeenCalledWith(0, 'title2'); }); test('title-style prop', () => { const wrapper = mount({ template: ` Text ` }); expect(wrapper.find('.van-tab').element.style.color).toEqual('red'); }); test('dot prop', () => { const wrapper = mount({ template: ` Text ` }); expect(wrapper).toMatchSnapshot(); }); test('info prop', () => { const wrapper = mount({ template: ` Text ` }); expect(wrapper).toMatchSnapshot(); }); test('scrollspy', async () => { const onChange = jest.fn(); window.scrollTo = jest.fn(); const wrapper = mount({ template: ` Text Text Text `, methods: { onChange } }); await later(); expect(wrapper).toMatchSnapshot(); const tabs = wrapper.findAll('.van-tab'); tabs.at(2).trigger('click'); expect(onChange).toHaveBeenCalledWith('c', 'title3'); await later(); mockScrollTop(100); expect(wrapper).toMatchSnapshot(); expect(onChange).toHaveBeenCalledWith('c', 'title3'); }); test('rendered event', () => { const onRendered = jest.fn(); const wrapper = mount({ template: ` Text Title2 `, data() { return { active: 'a' }; }, methods: { onRendered } }); expect(onRendered).toHaveBeenCalledWith('a', 'title1'); const tabs = wrapper.findAll('.van-tab'); tabs.at(1).trigger('click'); tabs.at(0).trigger('click'); expect(onRendered).toHaveBeenCalledTimes(2); }); test('should not trigger rendered event when disable lazy-render', () => { const onRendered = jest.fn(); mount({ template: ` Text Title2 `, methods: { onRendered } }); expect(onRendered).toHaveBeenCalledTimes(0); });