API d'assertions
Vitest intègre la bibliothèque @testing-library/jest-dom pour offrir une large gamme d'assertions DOM prêtes à l'emploi. Pour une documentation détaillée, veuillez consulter le fichier README de jest-dom :
toBeDisabledtoBeEnabledtoBeEmptyDOMElementtoBeInTheDocumenttoBeInvalidtoBeRequiredtoBeValidtoBeVisibletoContainElementtoContainHTMLtoHaveAccessibleDescriptiontoHaveAccessibleErrorMessagetoHaveAccessibleNametoHaveAttributetoHaveClasstoHaveFocustoHaveFormValuestoHaveStyletoHaveTextContenttoHaveValuetoHaveDisplayValuetoBeCheckedtoBePartiallyCheckedtoHaveRoletoHaveErrorMessage
Si vous utilisez TypeScript ou si vous souhaitez bénéficier de suggestions de types précises dans expect, assurez-vous d'avoir spécifié @vitest/browser/providers/playwright ou @vitest/browser/providers/webdriverio dans votre tsconfig en fonction du fournisseur que vous utilisez. Si vous utilisez le fournisseur par défaut preview, vous pouvez spécifier @vitest/browser/matchers à la place.
{
"compilerOptions": {
"types": ["@vitest/browser/matchers"]
}
}{
"compilerOptions": {
"types": ["@vitest/browser/providers/playwright"]
}
}{
"compilerOptions": {
"types": ["@vitest/browser/providers/webdriverio"]
}
}Les tests dans le navigateur peuvent parfois échouer de manière non déterministe en raison de leur nature asynchrone. Il est donc important de disposer d'un mécanisme pour garantir que les assertions réussissent même si la condition est retardée (par un délai d'attente, une requête réseau ou une animation, par exemple). À cette fin, Vitest propose des assertions avec mécanisme de réessai intégré via les API expect.poll et expect.element :
import { expect, test } from 'vitest';
import { page } from '@vitest/browser/context';
test('error banner is rendered', async () => {
triggerError();
// @testing-library fournit des requêtes avec un mécanisme de réessai intégré.
// Il tentera de trouver la bannière jusqu'à ce qu'elle soit rendue.
const banner = page.getByRole('alert', {
name: /error/i,
});
// Vitest fournit `expect.element` avec un mécanisme de réessai intégré.
// Il vérifiera que `element.textContent` est égal à "Error!".
await expect.element(banner).toHaveTextContent('Error!');
});TIP
expect.element est un raccourci pour expect.poll(() => element) et fonctionne exactement de la même manière.
toHaveTextContent et toutes les autres assertions @testing-library/jest-dom sont toujours disponibles sur un expect standard sans mécanisme de réessai intégré :
// échouera instantanément si .textContent n'est pas `'Error!'`
expect(banner).toHaveTextContent('Error!');