Skip to content

Commit d94a9a0

Browse files
committed
Add tests over toast store and fix README
1 parent 4815078 commit d94a9a0

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,10 @@ const cumplir = async (tarea: Tarea) => {
107107
}
108108
```
109109

110-
`showError` está definido en `errorHandler` y es una función que le aplica estilos al mensaje de error. Pueden ver su implementación.
110+
`showError` está definido en `errorHandler` y es una función que le aplica estilos al mensaje de error. Pueden ver su implementación, así como el toast interno que tiene
111+
112+
- un estado global llamado **store**, que almacena una colección de toasts que se van eliminando después de un cierto tiempo (por defecto duran 3 segundos)
113+
- y un **ToastContainer**, componente de Svelte que itera sobre los toasts del store y los muestra en la parte superior derecha de la página
111114

112115
## Validación de errores
113116

src/lib/components/toast/ToastContainer.spec.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,19 @@
11
import { render } from '@testing-library/svelte'
2-
import { describe, it, expect } from 'vitest'
2+
import { describe, it, expect, vi } from 'vitest'
33
import { toasts } from './toastStore'
44
import ToastContainer from '$lib/components/toast/ToastContainer.svelte'
5+
import { tick } from 'svelte'
6+
7+
// Mockeamos la transición para que no afecte a los tests, en especial el último
8+
vi.mock('svelte/transition', () => {
9+
return {
10+
fade: () => ({
11+
delay: 0,
12+
duration: 0,
13+
css: () => ''
14+
})
15+
}
16+
})
517

618
describe('ToastContainer', () => {
719
it('renders no toasts when store is empty', () => {
@@ -32,4 +44,14 @@ describe('ToastContainer', () => {
3244
expect(container.querySelector('.toast.error')).toBeTruthy()
3345
expect(container.querySelector('.toast.info')).toBeTruthy()
3446
})
47+
48+
it('is removed after a period of time', async () => {
49+
vi.useFakeTimers()
50+
toasts.push('Disappearing toast', { type: 'success', duration: 100 })
51+
const { queryByText } = render(ToastContainer)
52+
await vi.advanceTimersByTimeAsync(100)
53+
await tick()
54+
expect(queryByText('Disappearing toast')).toBeNull()
55+
vi.useRealTimers()
56+
})
3557
})

0 commit comments

Comments
 (0)