Saltar al contenido principal

Preguntas frecuentes

[Traducción Beta No Oficial]

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →


¿Esta biblioteca también funciona con SvelteKit?

Sí, funciona. Requiere la misma [configuración][] que un proyecto Svelte "normal".

¿Por qué no se llama a onMount al renderizar componentes?

Dado que la prueba se ejecuta en un entorno Node en lugar de un entorno de navegador, utiliza las exportaciones SSR de Svelte, que declaran todos los eventos del ciclo de vida como operaciones nulas (no-ops).

Una solución es configurar Vite para que utilice resoluciones de navegador en las pruebas.

vite.config.js
import {svelte} from '@sveltejs/vite-plugin-svelte'
import {defineConfig} from 'vite'

export default defineConfig(({mode}) => ({
plugins: [svelte()],
resolve: {
// The default would be [ 'svelte', 'node' ]
// as set by vite-plugin-svelte and vitest.
// This sets [ 'browser', 'svelte', 'node' ]
conditions: mode === 'test' ? ['browser'] : [],
},
test: {
environment: 'jsdom',
},
}))

Consulta el issue 222 de svelte-testing-library para más detalles.

¿Cómo pruebo la subida de archivos?

Utiliza la utilidad upload de @testing-library/user-event en lugar de fireEvent. Funciona bien tanto en jsdom como en happy-dom.

test('upload file', async () => {
const user = userEvent.setup()

render(Uploader)
const file = new File(['hello'], 'hello.png', {type: 'image/png'})
const input = screen.getByLabelText(/upload file/i)

await user.upload(input, file)

expect(input.files[0]).toBe(file)
expect(input.files.item(0)).toBe(file)
expect(input.files).toHaveLength(1)
})

¿Por qué no se ejecutan los [eventos de transición][]?

La implementación de requestAnimationFrame en jsdom puede ser poco confiable en Vitest. Para solucionarlo, puedes:

  • Cambiar a happy-dom, si es posible, que no presenta los mismos problemas

  • Reemplazar la implementación de requestAnimationFrame

beforeEach(() => {
const raf = fn => setTimeout(() => fn(new Date()), 16)
vi.stubGlobal('requestAnimationFrame', raf)
})

// Alternatively, set `unstubGlobals: true` in vitest.config.js
afterEach(() => {
vi.unstubAllGlobals()
})

Consulta el issue 206 de svelte-testing-library para más detalles.