import { config, DOMWrapper, mount } from '@vue/test-utils'; import Tabs from '../index.vue'; import TabPane from './../../tabpane/index.vue'; import { nextTick, reactive } from 'vue'; import NutIcon from '../../icon/index.vue'; beforeAll(() => { config.global.components = { NutIcon }; }); afterAll(() => { config.global.components = {}; }); test('base Tabs', () => { const wrapper = mount(Tabs); const rate = wrapper.find('.nut-tabs'); expect(rate.exists()).toBe(true); }); test('base tabs props', async () => { const wrapper = mount(Tabs, { props: { modelValue: '0', background: '#f5f5f5', color: '#f5f5f5', direction: 'horizontal', type: 'smile', size: 'large', 'title-scroll': true }, components: { 'nut-tabs': Tabs, 'nut-tabpane': TabPane } }); await nextTick(); const stepItem = wrapper.find('.nut-tabs__titles'); expect((stepItem.element as HTMLElement).style.background).toEqual('rgb(245, 245, 245)'); const _stepItem = wrapper.findAll('.horizontal'); expect(_stepItem.length).toBe(1); const _stepItem1 = wrapper.findAll('.nut-tabs__titles')[0]; expect(_stepItem1.classes()).toContain('smile'); const _stepItem2 = wrapper.findAll('.nut-tabs__titles')[0]; expect(_stepItem2.classes()).toContain('large'); const _stepItem3 = wrapper.findAll('.nut-tabs__titles')[0]; expect(_stepItem3.classes()).toContain('scrollable'); }); test('base other props', async () => { const wrapper = mount(Tabs, { props: { 'animated-time': 500, 'title-gutter': '20px' }, components: { 'nut-tabs': Tabs, 'nut-tabpane': TabPane } }); await nextTick(); const stepItem = wrapper.find('.nut-tabs__content'); expect((stepItem.element as HTMLElement).style.transitionDuration).toEqual('500ms'); setTimeout(() => { const stepItem1 = wrapper.find('.nut-tabs__titles-item'); expect((stepItem1.element as HTMLElement).style.marginLeft).toEqual('20px'); }, 0); }); test('base Tabs Slots', async () => { const wrapper = mount({ components: { 'nut-tabs': Tabs, 'nut-tabpane': TabPane }, template: ` {{ item.title }} `, setup() { const state = reactive({ tab7value: 'c1', list6: [ { title: '自定义 1', paneKey: 'c1', icon: 'dongdong' }, { title: '自定义 2', paneKey: 'c2', icon: 'JD' }, { title: '自定义 3', paneKey: 'c3' } ] }); return { state }; } }); await nextTick(); const tab1 = wrapper.find('.nut-tabs__titles'); expect(tab1.exists()).toBe(true); const tab2 = wrapper.findAll('.nut-tabs__titles-item'); expect(tab2.length).toBe(3); const tab3 = wrapper.findAll('.nut-tabs__titles-item__text'); expect(tab3[0].html()).toContain('自定义 1'); expect(tab3[1].html()).toContain('自定义 2'); expect(tab3[2].html()).toContain('自定义 3'); const tab4 = wrapper.find('.nut-tabs__content'); expect(tab4.exists()).toBe(true); }); test('base Tabpane Props', async () => { const wrapper = mount({ components: { 'nut-tabs': Tabs, 'nut-tabpane': TabPane }, template: ` Tab 2 Tab 3 `, setup() { const state = reactive({ tab2value: '0' }); return { state }; } }); await nextTick(); const tab = wrapper.findAll('.nut-tabs__titles-item'); expect(tab.length).toBe(3); const tab1 = wrapper.findAll('.nut-tabs__titles-item')[1]; expect(tab1.classes()).toContain('disabled'); const tab2 = wrapper.findAll('.nut-tabs__titles-item')[0]; expect(tab2.classes()).toContain('active'); const tab3 = wrapper.findAll('.nut-tabs__titles-item__text'); expect(tab3[0].html()).toContain('Tab 1'); }); test('base click', async () => { const wrapper = mount({ components: { 'nut-tabs': Tabs, 'nut-tabpane': TabPane }, template: ` Tab 1 Tab 2 Tab 3 `, setup() { const state = reactive({ tab1value: '0' }); return { state }; } }); await nextTick(); const tab = wrapper.find('.nut-tabs__titles-item'); expect(tab.classes()).toContain('active'); tab.trigger('click'); const tab1 = wrapper.find('.nut-tabs__content'); expect((tab1.element as HTMLElement).style.transform).toEqual('translate3d(-0%, 0, 0)'); });