vuetify
Version:
Vue Material Component Framework
100 lines (83 loc) • 2.18 kB
text/typescript
import Menuable from '../'
import {
mount,
MountOptions,
Wrapper,
} from '@vue/test-utils'
import VApp from '../../../components/VApp'
describe('menuable.ts', () => {
const Mock = Menuable.extend({
render: h => h('div'),
})
type Instance = InstanceType<typeof Mock>
let mountFunction: (options?: MountOptions<Instance>) => Wrapper<Instance>
beforeEach(() => {
mountFunction = (options?: MountOptions<Instance>) => {
return mount(Mock, options)
}
})
it('should bind custom activator', () => {
const wrapper = mountFunction({
attachToDocument: true,
propsData: {
activator: 'body',
},
})
expect(wrapper.vm.getActivator()).toBeTruthy()
})
it('should update dimensions when activated', async () => {
const sneakPeek = jest.fn()
const wrapper = mountFunction({
methods: {
sneakPeek,
},
})
wrapper.vm.updateDimensions()
await wrapper.vm.$nextTick()
expect(sneakPeek).toHaveBeenCalled()
})
it('should apply maxWidth in left calculations when offset', async () => {
const wrapper = mountFunction({
props: {
offsetY: Boolean,
offsetX: Boolean,
},
propsData: {
attach: true,
left: true,
offsetX: true,
maxWidth: 200,
},
})
wrapper.setData({
dimensions: {
activator: { width: 300 },
content: { width: 138 },
},
})
await wrapper.vm.$nextTick()
expect(wrapper.vm.computedLeft).toBe(-200)
})
it('should have the correct position non attached', async () => {
const wrapper = mount({
render (h) {
return h(VApp, [h(Mock)])
},
}, {
mocks: {
sync: false,
$vuetify: {
theme: {},
rtl: false,
},
},
})
await wrapper.vm.$nextTick()
const { vm } = wrapper.find(Mock) as Wrapper<Instance>
Object.assign(vm.dimensions.activator, { top: 100, left: 80 })
Object.assign(vm.dimensions.content, { width: 300, height: 50 })
await wrapper.vm.$nextTick()
expect(vm.computedTop).toBe(100)
expect(vm.computedLeft).toBe(80)
})
})