66 lines
1.9 KiB
JavaScript
66 lines
1.9 KiB
JavaScript
import { config, mount } from '@vue/test-utils';
|
|
import Listbox from './Listbox.vue';
|
|
|
|
config.global.mocks = {
|
|
$primevue: {
|
|
config: {
|
|
locale: {
|
|
aria: {
|
|
trueLabel: 'trueLabel',
|
|
falseLabel: 'falseLabel',
|
|
nullLabel: 'nullLabel'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
describe('Listbox.vue', () => {
|
|
let wrapper;
|
|
|
|
beforeEach(() => {
|
|
wrapper = mount(Listbox, {
|
|
props: {
|
|
modelValue: null,
|
|
options: [
|
|
{ name: 'New York', code: 'NY' },
|
|
{ name: 'Rome', code: 'RM' },
|
|
{ name: 'London', code: 'LDN' },
|
|
{ name: 'Istanbul', code: 'IST' },
|
|
{ name: 'Paris', code: 'PRS' }
|
|
],
|
|
optionLabel: 'name'
|
|
}
|
|
});
|
|
});
|
|
|
|
it('should exist', () => {
|
|
expect(wrapper.find('.p-listbox.p-component').exists()).toBe(true);
|
|
expect(wrapper.findAll('li.p-listbox-item').length).toBe(5);
|
|
expect(wrapper.findAll('li.p-listbox-item')[0].attributes()['aria-label']).toBe('New York');
|
|
});
|
|
|
|
it('should select a list item', async () => {
|
|
await wrapper.vm.onOptionSelect({}, wrapper.vm.options[0]);
|
|
|
|
expect(wrapper.emitted()['update:modelValue'][0]).toEqual([wrapper.vm.options[0]]);
|
|
|
|
await wrapper.setProps({ modelValue: wrapper.vm.options[0] });
|
|
|
|
expect(wrapper.findAll('li.p-listbox-item')[0].classes()).toContain('p-highlight');
|
|
});
|
|
|
|
describe('filter', () => {
|
|
it('should have correct custom icon', async () => {
|
|
await wrapper.setProps({
|
|
filter: true,
|
|
filterIcon: 'pi pi-discord'
|
|
});
|
|
|
|
const icon = wrapper.find('.p-listbox-filter-icon');
|
|
|
|
expect(icon.classes()).toContain('pi-discord');
|
|
});
|
|
});
|
|
});
|