import VueRouter from 'vue-router' import { mount } from '@vue/test-utils' import { waitRAF } from '../../../tests/utils' import { Vue } from '../../vue' import { BDropdownItem } from './dropdown-item' Vue.use(VueRouter) describe('dropdown-item', () => { it('renders with tag "a" and href="#" by default', async () => { const wrapper = mount(BDropdownItem) expect(wrapper.element.tagName).toBe('LI') const item = wrapper.find('a') expect(item.element.tagName).toBe('A') expect(item.attributes('href')).toBe('#') wrapper.destroy() }) it('has class "dropdown-item"', async () => { const wrapper = mount(BDropdownItem) expect(wrapper.element.tagName).toBe('LI') const item = wrapper.find('a') expect(item.classes()).toContain('dropdown-item') expect(item.attributes('href')).toBe('#') wrapper.destroy() }) it('calls dropdown hide(true) method when clicked', async () => { let called = false let refocus = null const wrapper = mount(BDropdownItem, { provide: { getBvDropdown: () => ({ hide(arg) { called = true refocus = arg } }) } }) expect(wrapper.element.tagName).toBe('LI') const item = wrapper.find('a') expect(item).toBeDefined() await item.trigger('click') await waitRAF() expect(called).toBe(true) expect(refocus).toBe(true) wrapper.destroy() }) it('does not call dropdown hide(true) method when clicked and disabled', async () => { let called = false let refocus = null const wrapper = mount(BDropdownItem, { propsData: { disabled: true }, provide: { getBvDropdown: () => ({ hide(arg) { called = true refocus = arg } }) } }) expect(wrapper.element.tagName).toBe('LI') const item = wrapper.find('a') expect(item).toBeDefined() await item.trigger('click') await waitRAF() expect(called).toBe(false) expect(refocus).toBe(null) wrapper.destroy() }) it('has linkClass when prop is passed a value', () => { const wrapper = mount(BDropdownItem, { propsData: { linkClass: 'link-class' } }) expect(wrapper.element.tagName).toBe('LI') const item = wrapper.find('a') expect(item.classes()).toContain('link-class') expect(item.classes()).toContain('dropdown-item') wrapper.destroy() }) describe('router-link support', () => { it('works', async () => { const router = new VueRouter({ mode: 'abstract', routes: [ { path: '/', component: { name: 'R', template: '