Test nel Codice Sorgente
Vitest offre la possibilità di eseguire test direttamente all'interno del codice sorgente, affiancando l'implementazione, in modo analogo ai test dei moduli di Rust.
Questo approccio consente ai test di condividere lo stesso ambito (closure) delle implementazioni e di verificare stati privati senza la necessità di esportarli. Al contempo, favorisce un ciclo di feedback più rapido durante lo sviluppo.
WARNING
Questa guida illustra come scrivere test all'interno del codice sorgente. Se la tua esigenza è scrivere test in file separati, ti invitiamo a consultare la guida "Scrivere Test".
Configurazione
Per iniziare, aggiungi un blocco if (import.meta.vitest)
alla fine del tuo file sorgente e inserisci i test al suo interno. Ad esempio:
// L'implementazione
export function add(...args: number[]) {
return args.reduce((a, b) => a + b, 0);
}
// Suite di test in-source
if (import.meta.vitest) {
const { it, expect } = import.meta.vitest;
it('add', () => {
expect(add()).toBe(0);
expect(add(1)).toBe(1);
expect(add(1, 2, 3)).toBe(6);
});
}
Aggiorna la configurazione includeSource
di Vitest per includere i file nella directory src/
:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
});
A questo punto, puoi avviare l'esecuzione dei test!
$ npx vitest
Build per la Produzione
Per la build di produzione, è necessario configurare le opzioni define
nel tuo file di configurazione, permettendo al bundler di eseguire il "dead code elimination" (eliminazione del codice morto). Ad esempio, con Vite:
/// <reference types="vitest/config" />
import { defineConfig } from 'vite'
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
define: {
'import.meta.vitest': 'undefined',
},
})
Altri Bundler
unbuild
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
replace: {
'import.meta.vitest': 'undefined',
},
// other options
})
Maggiori informazioni: unbuild
Rollup
import replace from '@rollup/plugin-replace'
export default {
plugins: [
replace({
'import.meta.vitest': 'undefined',
})
],
// other options
}
Maggiori informazioni: Rollup
TypeScript
Per abilitare il supporto TypeScript per import.meta.vitest
, aggiungi vitest/importMeta
al tuo tsconfig.json
:
{
"compilerOptions": {
"types": [
"vitest/importMeta"
]
}
}
Per un esempio completo, consulta examples/in-source-test
.
Note
Questa funzionalità è particolarmente utile per:
- Test unitari di funzioni o utility di piccole dimensioni
- Prototipazione
- Asserzioni in linea
Si raccomanda di utilizzare file di test separati per scenari più complessi, come test di componenti o test E2E.