bootstrap-vue-3
Version:
Early (but lovely) implementation of Vue 3, Bootstrap 5 and Typescript
179 lines (156 loc) • 5.73 kB
text/typescript
import {enableAutoUnmount, mount} from '@vue/test-utils'
import {afterEach, describe, expect, it} from 'vitest'
import BBreadcrumbItem from './BBreadcrumbItem.vue'
import BLink from '../BLink/BLink.vue'
describe('breadcrumb-item', () => {
enableAutoUnmount(afterEach)
it('has static class breadcrumb-item', () => {
const wrapper = mount(BBreadcrumbItem)
expect(wrapper.classes()).toContain('breadcrumb-item')
})
it('has class active when prop active', async () => {
const wrapper = mount(BBreadcrumbItem, {
props: {active: true},
})
expect(wrapper.classes()).toContain('active')
await wrapper.setProps({active: false})
expect(wrapper.classes()).not.toContain('active')
})
it('contains a span child when prop active', () => {
const wrapper = mount(BBreadcrumbItem, {
props: {active: true},
})
const $span = wrapper.find('span')
expect($span.exists()).toBe(true)
})
it('contains a blink child by default', () => {
const wrapper = mount(BBreadcrumbItem)
const $blink = wrapper.findComponent(BLink)
expect($blink.exists()).toBe(true)
})
it('child contains attr aria-current when prop active', async () => {
const wrapper = mount(BBreadcrumbItem, {
props: {active: true, ariaCurrent: 'foobar'},
})
const $span = wrapper.get('span')
expect($span.attributes('aria-current')).toBe('foobar')
await wrapper.setProps({active: false})
const $blink = wrapper.getComponent(BLink)
expect($blink.attributes('aria-current')).toBeUndefined()
})
it('emits click event', async () => {
const wrapper = mount(BBreadcrumbItem)
const $blink = wrapper.getComponent(BLink)
await $blink.trigger('click')
expect($blink.emitted()).toHaveProperty('click')
})
it('does not emit click event when prop disabled and blink clicked', async () => {
const wrapper = mount(BBreadcrumbItem, {
props: {disabled: true},
})
const $blink = wrapper.getComponent(BLink)
await $blink.trigger('click')
expect(wrapper.emitted('click')).toBeUndefined()
})
it('does not emit click event when prop active and span clicked', async () => {
const wrapper = mount(BBreadcrumbItem, {
props: {active: true},
})
const $span = wrapper.get('span')
await $span.trigger('click')
expect(wrapper.emitted('click')).toBeUndefined()
})
it('emits a MouseEvent when clicked', async () => {
const wrapper = mount(BBreadcrumbItem)
const $blink = wrapper.getComponent(BLink)
await $blink.trigger('click')
const $emitted = $blink.emitted('click') ?? []
expect($emitted[0][0] instanceof MouseEvent).toBe(true)
})
it('renders default slot in child when child is span', () => {
const wrapper = mount(BBreadcrumbItem, {
props: {active: true},
slots: {default: 'foobar'},
})
const $span = wrapper.get('span')
expect($span.text()).toBe('foobar')
})
it('renders prop text in child when child is span', () => {
const wrapper = mount(BBreadcrumbItem, {
props: {active: true, text: 'foobar'},
})
const $span = wrapper.get('span')
expect($span.text()).toBe('foobar')
})
it('renders prop text in child when child is span', () => {
const wrapper = mount(BBreadcrumbItem, {
props: {active: true, text: 'props'},
slots: {default: 'slots'},
})
const $span = wrapper.get('span')
expect($span.text()).toBe('slots')
})
it('does not give prop active to child', () => {
const wrapper = mount(BBreadcrumbItem, {
props: {active: true},
})
const $span = wrapper.get('span')
expect($span.attributes('active')).toBeUndefined()
})
it('does not give prop ariaCurrent to child', () => {
const wrapper = mount(BBreadcrumbItem, {
props: {active: true, ariaCurrent: 'foobar'},
})
const $span = wrapper.get('span')
expect($span.attributes('ariaCurrent')).toBeUndefined()
})
it('does not give prop disabled to child', () => {
const wrapper = mount(BBreadcrumbItem, {
props: {active: true, disabled: true},
})
const $span = wrapper.get('span')
expect($span.attributes('disabled')).toBeUndefined()
})
it('does not give prop text to child', () => {
const wrapper = mount(BBreadcrumbItem, {
props: {active: true, text: 'foobar'},
})
const $span = wrapper.get('span')
expect($span.attributes('text')).toBeUndefined()
})
it('gives prop active to child when blink', () => {
const wrapper = mount(BBreadcrumbItem, {
props: {active: false},
})
const $blink = wrapper.getComponent(BLink)
expect($blink.props('active')).toBe(false)
})
it('does not give prop ariaCurrent to child when blink', () => {
const wrapper = mount(BBreadcrumbItem, {
props: {active: false, ariaCurrent: 'foobar'},
})
const $blink = wrapper.getComponent(BLink)
expect($blink.props('ariaCurrent')).toBeUndefined()
})
it('gives prop disabled to child when blink', () => {
const wrapper = mount(BBreadcrumbItem, {
props: {active: false, disabled: true},
})
const $blink = wrapper.getComponent(BLink)
expect($blink.props('disabled')).toBe(true)
})
it('does not give prop text to child when blink', () => {
const wrapper = mount(BBreadcrumbItem, {
props: {active: false, text: 'foobar'},
})
const $blink = wrapper.getComponent(BLink)
expect($blink.props('text')).toBeUndefined()
})
it('gives prop activeClass to blink', () => {
const wrapper = mount(BBreadcrumbItem, {
props: {activeClass: 'foobar'},
})
const $blink = wrapper.getComponent(BLink)
expect($blink.props('activeClass')).toBe('foobar')
})
})