API di Asserzione
Vitest integra la libreria @testing-library/jest-dom per fornire un'ampia gamma di asserzioni DOM disponibili out-of-the-box. Per la documentazione dettagliata, puoi consultare il readme di jest-dom:
toBeDisabledtoBeEnabledtoBeEmptyDOMElementtoBeInTheDocumenttoBeInvalidtoBeRequiredtoBeValidtoBeVisibletoContainElementtoContainHTMLtoHaveAccessibleDescriptiontoHaveAccessibleErrorMessagetoHaveAccessibleNametoHaveAttributetoHaveClasstoHaveFocustoHaveFormValuestoHaveStyletoHaveTextContenttoHaveValuetoHaveDisplayValuetoBeCheckedtoBePartiallyCheckedtoHaveRoletoHaveErrorMessage
Se stai utilizzando TypeScript o desideri avere suggerimenti di tipo corretti in expect, assicurati di aver specificato @vitest/browser/providers/playwright o @vitest/browser/providers/webdriverio nel tuo tsconfig a seconda del provider utilizzato. Se usi il provider predefinito preview, puoi specificare invece @vitest/browser/matchers.
{
"compilerOptions": {
"types": ["@vitest/browser/matchers"]
}
}{
"compilerOptions": {
"types": ["@vitest/browser/providers/playwright"]
}
}{
"compilerOptions": {
"types": ["@vitest/browser/providers/webdriverio"]
}
}I test nel browser potrebbero fallire in modo non deterministico a causa della loro natura asincrona. Per questo motivo, è importante avere un modo per garantire che le asserzioni abbiano successo anche se la condizione è soggetta a ritardi (ad esempio, da un timeout, una richiesta di rete o un'animazione). A questo scopo, Vitest fornisce asserzioni ripetibili pronte all'uso tramite le API expect.poll e expect.element:
import { expect, test } from 'vitest';
import { page } from '@vitest/browser/context';
test('error banner is rendered', async () => {
triggerError();
// @testing-library fornisce query con funzionalità di riprova integrate
// Proverà a trovare il banner finché non viene renderizzato
const banner = page.getByRole('alert', {
name: /error/i,
});
// Vitest fornisce `expect.element` con funzionalità di riprova integrate
// Verificherà `element.textContent` finché non sarà uguale a "Error!"
await expect.element(banner).toHaveTextContent('Error!');
});TIP
expect.element è una scorciatoia per expect.poll(() => element) e funziona esattamente allo stesso modo.
toHaveTextContent e tutte le altre asserzioni di @testing-library/jest-dom sono ancora disponibili su un normale expect senza un meccanismo di riprova integrato:
// fallisce immediatamente se .textContent non è `'Error!'`
expect(banner).toHaveTextContent('Error!');