Aller au contenu principal

FAQ

[Traduction Bêta Non Officielle]

Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →


Cette bibliothèque fonctionne-t-elle avec SvelteKit ?

Oui. Elle nécessite la même configuration que pour un projet Svelte standard.

Pourquoi onMount n'est-il pas appelé lors du rendu des composants ?

Comme les tests s'exécutent dans un environnement Node plutôt que dans un navigateur, ils utilisent les exports SSR de Svelte qui définissent tous les événements de cycle de vie comme des opérations neutres (no-ops).

Une solution consiste à configurer Vite pour utiliser les résolutions navigateur durant les tests.

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

Consultez l'issue 222 de svelte-testing-library pour plus de détails.

Comment tester l'upload de fichiers ?

Utilisez l'utilitaire upload de @testing-library/user-event plutôt que fireEvent. Il fonctionne correctement avec jsdom et 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)
})

Pourquoi les événements de transition ne se déclenchent-ils pas ?

L'implémentation de requestAnimationFrame par jsdom peut être peu fiable dans Vitest. Pour contourner ce problème :

  • Passez à happy-dom si possible, qui ne présente pas ces problèmes

  • Remplacez l'implémentation 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()
})

Voir l'issue 206 de svelte-testing-library pour plus de détails.