Assertion API
Vitest bündelt die Bibliothek @testing-library/jest-dom, um eine breite Palette von DOM-Assertions direkt zur Verfügung zu stellen. Eine detaillierte Dokumentation finden Sie in der jest-dom-README:
toBeDisabledtoBeEnabledtoBeEmptyDOMElementtoBeInTheDocumenttoBeInvalidtoBeRequiredtoBeValidtoBeVisibletoContainElementtoContainHTMLtoHaveAccessibleDescriptiontoHaveAccessibleErrorMessagetoHaveAccessibleNametoHaveAttributetoHaveClasstoHaveFocustoHaveFormValuestoHaveStyletoHaveTextContenttoHaveValuetoHaveDisplayValuetoBeCheckedtoBePartiallyCheckedtoHaveRoletoHaveErrorMessage
Wenn Sie TypeScript verwenden und korrekte Typ-Hinweise in expect erhalten möchten, stellen Sie sicher, dass Sie je nach verwendetem Provider entweder @vitest/browser/providers/playwright oder @vitest/browser/providers/webdriverio in Ihrer tsconfig angeben. Wenn Sie den Standard-preview-Provider verwenden, können Sie stattdessen @vitest/browser/matchers angeben.
{
"compilerOptions": {
"types": ["@vitest/browser/matchers"]
}
}{
"compilerOptions": {
"types": ["@vitest/browser/providers/playwright"]
}
}{
"compilerOptions": {
"types": ["@vitest/browser/providers/webdriverio"]
}
}Tests im Browser können aufgrund ihrer asynchronen Natur inkonsistent fehlschlagen. Aus diesem Grund ist es wichtig, eine Möglichkeit zu haben, um sicherzustellen, dass Assertions erfolgreich sind, auch wenn die Bedingung verzögert eintritt (z. B. durch ein Timeout, eine Netzwerkanfrage oder eine Animation). Zu diesem Zweck bietet Vitest wiederholbare Assertions sofort über die APIs expect.poll und expect.element an:
import { expect, test } from 'vitest';
import { page } from '@vitest/browser/context';
test('error banner is rendered', async () => {
triggerError();
// @testing-library bietet Queries mit integrierter Wiederholungsfähigkeit
// Es wird versuchen, das Banner zu finden, bis es gerendert ist
const banner = page.getByRole('alert', {
name: /error/i,
});
// Vitest bietet `expect.element` mit integrierter Wiederholungsfähigkeit
// Es wird `element.textContent` überprüfen, bis es gleich "Error!" ist
await expect.element(banner).toHaveTextContent('Error!');
});TIP
expect.element ist eine Kurzform für expect.poll(() => element) und funktioniert genau gleich.
toHaveTextContent und alle anderen @testing-library/jest-dom-Assertions sind weiterhin mit einem regulären expect ohne integrierten Wiederholungsmechanismus verfügbar:
// schlägt sofort fehl, wenn .textContent nicht `'Error!'` ist
expect(banner).toHaveTextContent('Error!');