visua-vue/test/VModal.spec.ts

70 lines
1.5 KiB
TypeScript
Raw Normal View History

2025-07-28 01:22:49 +02:00
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { mount } from '@vue/test-utils';
import { nextTick } from 'vue';
import VModal from '../src/components/modal/VModal.vue';
import type IVButton from '../src/components/button/IVButton.type';
describe('VModal.vue', () => {
let actions: IVButton[];
let visible: boolean;
beforeEach(() => {
visible = true;
actions = [
{
label: 'Bouton primaire',
onClick: vi.fn(),
title: 'primaire',
},
{
label: 'Bouton secondaire',
secondary: true,
onClick: vi.fn(),
title: 'secondaire',
},
{
label: 'Bouton tertiaire',
tertiary: true,
onClick: vi.fn(),
title: 'tertiaire',
},
];
});
it('emits update:visible when internal visibility changes', async () => {
const wrapper = mount(VModal, {
props: {
visible: true,
actions,
},
});
// Simulation dun changement interne
await wrapper.vm.$emit('update:visible', false);
await nextTick();
const emitted = wrapper.emitted('update:visible');
expect(emitted).toBeTruthy();
expect(emitted?.[0]).toEqual([false]);
});
it('emits lifecycle events (show/hide)', async () => {
const wrapper = mount(VModal, {
props: {
visible,
actions,
},
});
wrapper.vm.$emit('show');
wrapper.vm.$emit('hide');
await nextTick();
expect(wrapper.emitted('show')).toBeTruthy();
expect(wrapper.emitted('hide')).toBeTruthy();
});
});