Preact
Preact è un'alternativa veloce a React di soli 3kB con la stessa API moderna. Puoi testare i componenti Preact direttamente in un browser reale utilizzando WebdriverIO e il suo browser runner.
Setup
Per configurare WebdriverIO all'interno del tuo progetto Preact, segui le istruzioni nella nostra documentazione sui test dei componenti. Assicurati di selezionare preact
come preset nelle tue opzioni di runner, ad esempio:
// wdio.conf.js
export const config = {
// ...
runner: ['browser', {
preset: 'preact'
}],
// ...
}
Se stai già utilizzando Vite come server di sviluppo, puoi anche riutilizzare la tua configurazione in vite.config.ts
all'interno della tua configurazione WebdriverIO. Per maggiori informazioni, consulta viteConfig
nelle opzioni runner.
Il preset Preact richiede l'installazione di @preact/preset-vite
. Inoltre, consigliamo di utilizzare Testing Library per renderizzare il componente nella pagina di test. Pertanto, dovrai installare le seguenti dipendenze aggiuntive:
- npm
- Yarn
- pnpm
npm install --save-dev @testing-library/preact @preact/preset-vite
yarn add --dev @testing-library/preact @preact/preset-vite
pnpm add --save-dev @testing-library/preact @preact/preset-vite
Puoi quindi avviare i test eseguendo:
npx wdio run ./wdio.conf.js
Scrittura dei Test
Dato il seguente componente Preact:
import { h } from 'preact'
import { useState } from 'preact/hooks'
interface Props {
initialCount: number
}
export function Counter({ initialCount }: Props) {
const [count, setCount] = useState(initialCount)
const increment = () => setCount(count + 1)
return (
<div>
Current value: {count}
<button onClick={increment}>Increment</button>
</div>
)
}
Nel tuo test utilizza il metodo render
da @testing-library/preact
per collegare il componente alla pagina di test. Per interagire con il componente, consigliamo di utilizzare i comandi WebdriverIO poiché si comportano in modo più simile alle interazioni reali dell'utente, ad esempio:
import { expect } from 'expect'
import { render, screen } from '@testing-library/preact'
import { Counter } from './components/PreactComponent.js'
describe('Preact Component Testing', () => {
it('should increment after "Increment" button is clicked', async () => {
const component = await $(render(<Counter initialCount={5} />))
await expect(component).toHaveText(expect.stringContaining('Current value: 5'))
const incrElem = await $(screen.getByText('Increment'))
await incrElem.click()
await expect(component).toHaveText(expect.stringContaining('Current value: 6'))
})
})
Puoi trovare un esempio completo di una suite di test di componenti WebdriverIO per Preact nel nostro repository di esempio.