bootstrap-vue
Version:
With more than 85 components, over 45 available plugins, several directives, and 1000+ icons, BootstrapVue provides one of the most comprehensive implementations of the Bootstrap v4 component and grid system available for Vue.js v2.6, complete with extens
184 lines (163 loc) • 4.29 kB
JavaScript
import { mount } from '@vue/test-utils'
import { BBreadcrumb } from './breadcrumb'
describe('breadcrumb', () => {
it('should have expected default structure', async () => {
const wrapper = mount(BBreadcrumb)
expect(wrapper.element.tagName).toBe('OL')
expect(wrapper.classes()).toContain('breadcrumb')
expect(wrapper.classes().length).toBe(1)
expect(wrapper.text()).toBe('')
wrapper.destroy()
})
it('should render default slot when no items provided', async () => {
const wrapper = mount(BBreadcrumb, {
slots: {
default: 'foobar'
}
})
expect(wrapper.element.tagName).toBe('OL')
expect(wrapper.classes()).toContain('breadcrumb')
expect(wrapper.classes().length).toBe(1)
expect(wrapper.text()).toBe('foobar')
wrapper.destroy()
})
it('should accept items', () => {
const wrapper = mount(BBreadcrumb, {
propsData: {
items: [
{ text: 'Home', href: '/' },
{ text: 'Admin', to: '/admin', active: false },
{ html: '<b>Manage</b>', href: '/admin/manage' },
// Test with non object
'Library'
]
}
})
expect(wrapper.element.tagName).toBe('OL')
expect(wrapper.classes()).toContain('breadcrumb')
expect(wrapper.classes().length).toBe(1)
expect(wrapper.findAll('li').length).toBe(4)
expect(wrapper.findAll('li.breadcrumb-item').length).toBe(4)
const $lis = wrapper.findAll('li')
// HREF testing
expect(
$lis
.at(0)
.find('a')
.exists()
).toBe(true)
expect(
$lis
.at(0)
.find('a')
.attributes('href')
).toBe('/')
expect($lis.at(0).text()).toBe('Home')
expect(
$lis
.at(1)
.find('a')
.exists()
).toBe(true)
expect(
$lis
.at(1)
.find('a')
.attributes('href')
).toBe('/admin')
expect($lis.at(1).text()).toBe('Admin')
expect(
$lis
.at(2)
.find('a')
.exists()
).toBe(true)
expect(
$lis
.at(2)
.find('a')
.attributes('href')
).toBe('/admin/manage')
expect($lis.at(2).text()).toBe('Manage')
// Last item should have active state
expect($lis.at(3).classes()).toContain('active')
expect(
$lis
.at(3)
.find('span')
.exists()
).toBe(true)
expect($lis.at(3).text()).toBe('Library')
wrapper.destroy()
})
it('should apply active class to active item', async () => {
const wrapper = mount(BBreadcrumb, {
propsData: {
items: [
{ text: 'Home', href: '/' },
{ text: 'Admin', to: '/admin', active: true },
{ html: '<b>Manage</b>', href: '/admin/manage' },
{ text: 'Library', href: '/admin/manage/library' }
]
}
})
expect(wrapper.element.tagName).toBe('OL')
expect(wrapper.classes()).toContain('breadcrumb')
expect(wrapper.classes().length).toBe(1)
expect(wrapper.findAll('li').length).toBe(4)
expect(wrapper.findAll('li.breadcrumb-item').length).toBe(4)
const $lis = wrapper.findAll('li')
// HREF testing
expect(
$lis
.at(0)
.find('a')
.exists()
).toBe(true)
expect(
$lis
.at(0)
.find('a')
.attributes('href')
).toBe('/')
expect($lis.at(0).text()).toBe('Home')
// This one should be a span/active
expect(
$lis
.at(1)
.find('span')
.exists()
).toBe(true)
expect($lis.at(1).classes()).toContain('active')
expect($lis.at(1).text()).toBe('Admin')
expect(
$lis
.at(2)
.find('a')
.exists()
).toBe(true)
expect(
$lis
.at(2)
.find('a')
.attributes('href')
).toBe('/admin/manage')
expect($lis.at(2).text()).toBe('Manage')
// Last item should have active state
expect($lis.at(3).classes()).not.toContain('active')
expect(
$lis
.at(3)
.find('a')
.exists()
).toBe(true)
expect(
$lis
.at(3)
.find('a')
.attributes('href')
).toBe('/admin/manage/library')
expect($lis.at(3).text()).toBe('Library')
wrapper.destroy()
})
})