UNPKG

quasar

Version:

Build high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time

179 lines (145 loc) 4.89 kB
import { mount, flushPromises } from '@vue/test-utils' import { describe, test, expect } from 'vitest' // import QBreadcrumbs from './QBreadcrumbs.js' import { alignMap } from 'quasar/src/composables/private.use-align/use-align.js' import BasicBreadcrumbs from './test/BasicBreadcrumbs.vue' import BreadcrumbWithSeparatorSlot from './test/BreadcrumbWithSeparatorSlot.vue' describe('[QBreadcrumbs API]', () => { describe('[Props]', () => { describe('[(prop)separator]', () => { test('type String has effect', async () => { const propVal = '>' const wrapper = mount(BasicBreadcrumbs) expect( wrapper.get('.q-breadcrumbs__separator') .text() ).not.toContain(propVal) await wrapper.setProps({ separator: propVal }) await flushPromises() expect( wrapper.get('.q-breadcrumbs__separator') .text() ).toContain(propVal) }) }) describe('[(prop)active-color]', () => { test('type String has effect', async () => { const propVal = 'red' const wrapper = mount(BasicBreadcrumbs) expect( wrapper.get('.q-breadcrumbs > div > .flex.items-center:not(.q-breadcrumbs--last)') .classes() ).not.toContain('text-red') await wrapper.setProps({ activeColor: propVal }) await flushPromises() expect( wrapper.get('.q-breadcrumbs > div > .flex.items-center:not(.q-breadcrumbs--last)') .classes() ).toContain('text-red') }) }) describe('[(prop)gutter]', () => { test('value "none" has effect', async () => { const propVal = 'none' const wrapper = mount(BasicBreadcrumbs) expect( wrapper.get('.q-breadcrumbs > div') .classes() ).toContain('q-gutter-sm') await wrapper.setProps({ gutter: propVal }) await flushPromises() expect( wrapper.get('.q-breadcrumbs > div') .classes() ).toSatisfy( list => list.every(cls => cls.startsWith('q-gutter') === false) ) }) test.each([ [ 'xs' ], [ 'sm' ], [ 'md' ], [ 'lg' ], [ 'xl' ] ])('value %s has effect', async propVal => { const wrapper = mount(BasicBreadcrumbs) expect( wrapper.get('.q-breadcrumbs > div') .classes() ).toContain('q-gutter-sm') await wrapper.setProps({ gutter: propVal }) await flushPromises() if (propVal !== 'sm') { // the default value expect( wrapper.get('.q-breadcrumbs > div') .classes() ).not.toContain('q-gutter-sm') } expect( wrapper.get('.q-breadcrumbs > div') .classes() ).toContain(`q-gutter-${ propVal }`) }) }) describe('[(prop)separator-color]', () => { test('type String has effect', async () => { const propVal = 'red' const wrapper = mount(BasicBreadcrumbs) wrapper.findAll('.q-breadcrumbs__separator') .forEach(el => expect(el.classes()).not.toContain('text-red')) // TODO: write expectations without the prop // (usually negate the effect of the prop) await wrapper.setProps({ separatorColor: propVal }) await flushPromises() wrapper.findAll('.q-breadcrumbs__separator') .forEach(el => expect(el.classes()).toContain('text-red')) }) }) describe('[(prop)align]', () => { test.each([ [ 'left' ], [ 'center' ], [ 'right' ], [ 'between' ], [ 'around' ], [ 'evenly' ] ])('value "%s" has effect', async propVal => { const wrapper = mount(BasicBreadcrumbs) if (propVal !== 'left') { // the default value expect( wrapper.get('.q-breadcrumbs > div') .classes() ).not.toContain(`justify-${ alignMap[ propVal ] }`) } await wrapper.setProps({ align: propVal }) await flushPromises() expect( wrapper.get('.q-breadcrumbs > div') .classes() ).toContain(`justify-${ alignMap[ propVal ] }`) }) }) }) describe('[Slots]', () => { describe('[(slot)default]', () => { test('renders the content', () => { const wrapper = mount(BasicBreadcrumbs) expect( wrapper.get('.q-breadcrumbs > div') .text() ).toContain('Home') }) }) describe('[(slot)separator]', () => { test('renders the content', () => { const wrapper = mount(BreadcrumbWithSeparatorSlot) expect( wrapper.get('.q-breadcrumbs__separator') .text() ).toContain('arrow_forward') }) }) }) })