@ishitatsuyuki/oruga-next
Version:
UI components for Vue.js and CSS framework agnostic
121 lines (101 loc) • 3.17 kB
JavaScript
import {mount} from '@vue/test-utils'
import OTabs from '@components/tabs/Tabs'
import OTabItem from '@components/tabs/TabItem'
let wrapper
let wrapperParent
const WrapperComp = {
data() {
return {
show1: true
}
},
template: `
<OTabs>
<OTabItem v-if="show1" value="tab1"/>
<OTabItem ref="testItem" value="tab2"/>
<OTabItem value="tab3" :visible="false"/>
</OTabs>`,
components: {
OTabs, OTabItem
}
}
describe('OTabItem', () => {
beforeEach(() => {
wrapperParent = mount(WrapperComp)
wrapper = wrapperParent.find({ ref: 'testItem' })
})
it('is called', () => {
expect(wrapper.exists()).toBeTruthy()
expect(wrapper.vm.value).toBe('tab2')
})
it('render correctly', () => {
expect(wrapper.html()).toMatchSnapshot()
})
it('computes its position correctly', () => {
expect(wrapper.vm.index).toBe(1)
})
it('will recompute indexes when a sibling gets removed', async () => {
expect(wrapper.vm.index).toBe(1)
wrapperParent.vm.show1 = false
await wrapper.vm.$nextTick()
expect(wrapper.vm.index).toBe(0)
})
it('transition correctly when activate is called', () => {
wrapper.vm.activate(0)
expect(wrapper.vm.transitionName).toBe('slide-prev')
wrapper.vm.activate(2)
expect(wrapper.vm.transitionName).toBe('slide-next')
})
it('transition correctly when deactivate is called', () => {
wrapper.vm.deactivate(2)
expect(wrapper.vm.transitionName).toBe('slide-prev')
wrapper.vm.deactivate(0)
expect(wrapper.vm.transitionName).toBe('slide-next')
})
/*
it('doesn\'t mount when it has no parent', () => {
const spy = jest.spyOn(global.console, 'error').mockImplementation(() => {})
try {
wrapper = mount({
template: `<OTabItem/>`,
components: {
OTabItem
},
destroyed() {
spy()
}
})
} catch (error) {
expect(error.message).stringMatching(/You should wrap/)
} finally {
spy.mockRestore()
}
})
*/
it('unregisters when destroyed', async () => {
const wrapper = mount({
template: `
<OTabs>
<OTabItem ref="item1"/>
<OTabItem v-if="item2" ref="item2"/>
</OTabs>`,
props: {
item2: {
type: Boolean,
default: true
}
},
components: {
OTabs, OTabItem
}
})
expect(wrapper.find({ref: 'item2'})).toBeTruthy()
await wrapper.vm.$nextTick()
expect(wrapper.find(OTabs).vm.items.length).toBe(2)
wrapper.setProps({item2: false})
await wrapper.vm.$nextTick()
expect(wrapper.find(OTabs).vm.items.length).toBe(1)
wrapper.setProps({item2: true})
wrapper.find(OTabs).setProps({value: 1})
})
})