Assertion API
Vitest obsahuje knihovnu @testing-library/jest-dom, která poskytuje širokou škálu DOM ověření ihned k dispozici. Podrobnou dokumentaci naleznete v souboru readme jest-dom:
toBeDisabledtoBeEnabledtoBeEmptyDOMElementtoBeInTheDocumenttoBeInvalidtoBeRequiredtoBeValidtoBeVisibletoContainElementtoContainHTMLtoHaveAccessibleDescriptiontoHaveAccessibleErrorMessagetoHaveAccessibleNametoHaveAttributetoHaveClasstoHaveFocustoHaveFormValuestoHaveStyletoHaveTextContenttoHaveValuetoHaveDisplayValuetoBeCheckedtoBePartiallyCheckedtoHaveRoletoHaveErrorMessage
Pokud používáte TypeScript nebo chcete mít správné typové hinty v expect, ujistěte se, že máte v tsconfig specifikováno buď @vitest/browser/providers/playwright nebo @vitest/browser/providers/webdriverio v závislosti na poskytovateli, kterého používáte. Pokud používáte výchozí poskytovatel preview, můžete místo toho specifikovat @vitest/browser/matchers.
{
"compilerOptions": {
"types": ["@vitest/browser/matchers"]
}
}{
"compilerOptions": {
"types": ["@vitest/browser/providers/playwright"]
}
}{
"compilerOptions": {
"types": ["@vitest/browser/providers/webdriverio"]
}
}Testy v prohlížeči mohou selhávat nepravidelně kvůli jejich asynchronní povaze. Z tohoto důvodu je důležité mít způsob, jak zajistit, že aserce budou úspěšné, i když je podmínka zpožděna (například timeoutem, síťovým požadavkem nebo animací). Pro tento účel Vitest poskytuje opakovatelná ověření ihned k dispozici prostřednictvím API expect.poll a expect.element:
import { expect, test } from 'vitest';
import { page } from '@vitest/browser/context';
test('error banner is rendered', async () => {
triggerError();
// @testing-library poskytuje query s vestavěnou možností opakování
// Bude se snažit najít banner, dokud nebude vykreslen
const banner = page.getByRole('alert', {
name: /error/i,
});
// Vitest poskytuje `expect.element` s vestavěnou možností opakování
// Bude kontrolovat `element.textContent`, dokud nebude mít hodnotu "Error!"
await expect.element(banner).toHaveTextContent('Error!');
});TIP
expect.element je zkratka pro expect.poll(() => element) a funguje přesně stejným způsobem.
toHaveTextContent a všechny ostatní aserce z @testing-library/jest-dom jsou stále k dispozici na běžném expect bez vestavěného mechanismu opakovatelnosti:
// selže okamžitě, pokud .textContent není 'Error!'
expect(banner).toHaveTextContent('Error!');