import { beforeEach, describe, expect, it } from 'vitest' import { axe } from 'vitest-axe' import type { DOMWrapper, VueWrapper } from '@vue/test-utils' import { mount } from '@vue/test-utils' import { nextTick } from 'vue' import { findByText, fireEvent } from '@testing-library/vue' import Toast from './story/_Toast.vue' const CLOSE_TEXT = 'Close' describe('given a default Toast', () => { let wrapper: VueWrapper> let trigger: DOMWrapper let closeButton: HTMLElement beforeEach(() => { document.body.innerHTML = '' wrapper = mount(Toast, { attachTo: document.body }) trigger = wrapper.find('button') }) it('should pass axe accessibility tests', async () => { expect(await axe(document.body)).toHaveNoViolations() // open toast wrapper.find('button').element.click() await nextTick() expect(await axe(document.body)).toHaveNoViolations() }) describe('after clicking the trigger', () => { beforeEach(async () => { fireEvent.click(trigger.element) closeButton = await findByText(document.body, CLOSE_TEXT) }) it('should open the content', () => { expect(document.body.innerHTML).toContain(closeButton.innerHTML) }) describe('when clicking close button', () => { beforeEach(async () => { await fireEvent.click(closeButton) }) it('should close the content', () => { expect(document.body.innerHTML).not.toContain(closeButton.innerHTML) }) }) describe('when pressing escape', () => { beforeEach(() => { fireEvent.keyDown(document.activeElement!, { key: 'Escape' }) }) it('should close the content', () => { expect(document.body.innerHTML).not.toContain(closeButton.innerHTML) }) }) }) })