Ir para o conteúdo principal

Perguntas Frequentes

[Tradução Beta Não Oficial]

Esta página foi traduzida por PageTurner AI (beta). Não é oficialmente endossada pelo projeto. Encontrou um erro? Reportar problema →


Esta biblioteca também funciona com o SvelteKit?

Sim, funciona. Requer a mesma configuração de um projeto Svelte "normal".

Por que o onMount não é chamado ao renderizar componentes?

Como os testes são executados em ambiente Node em vez de navegador, utilizam as exportações SSR do Svelte, que configuram todos os eventos de ciclo de vida para não executarem nenhuma operação.

Uma solução é configurar o Vite para usar resoluções de navegador nos testes.

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',
},
}))

Veja mais detalhes no issue 222 do svelte-testing-library.

Como testar upload de arquivos?

Use o utilitário upload do @testing-library/user-event em vez do fireEvent. Ele funciona bem tanto no jsdom quanto no 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 que os [eventos de transição][] não estão sendo executados?

A implementação do requestAnimationFrame no jsdom pode ser inconsistente no Vitest. Para contornar isso, você pode:

  • Migrar para o happy-dom, se possível, que não apresenta os mesmos problemas

  • Substituir a implementação do 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()
})

Veja mais detalhes no issue 206 do svelte-testing-library.