Test nel codice sorgente
Vitest offre un modo per eseguire i test direttamente all'interno del codice sorgente, affiancati all'implementazione, in modo simile ai test di modulo di Rust.
Questo approccio permette ai test di condividere lo stesso contesto delle implementazioni. In questo modo, è possibile testare stati privati senza doverli esportare. Allo stesso tempo, offre un feedback più immediato durante lo sviluppo.
Configurazione
Per iniziare, inserisci un blocco if (import.meta.vitest)
alla fine del tuo file sorgente e scrivi alcuni test al suo interno. Ad esempio:
// src/index.ts
// the implementation (l'implementazione)
export function add(...args: number[]) {
return args.reduce((a, b) => a + b, 0);
}
// in-source test suites (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
per Vitest per includere i file nella directory src/
:
// vite.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
});
A questo punto è possibile eseguire i test!
$ npx vitest
Build di produzione
Per la build di produzione, è necessario impostare le opzioni define
nel file di configurazione, consentendo al bundler di eseguire l'eliminazione del codice inutilizzato (dead code elimination). Ad esempio, in Vite:
// vite.config.ts
import { defineConfig } from 'vitest/config'
export default defineConfig({
+ define: {
+ 'import.meta.vitest': 'undefined',
+ },
test: {
includeSource: ['src/**/*.{js,ts}']
},
})
Altri Bundler
unbuild
// build.config.ts
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
+ replace: {
+ 'import.meta.vitest': 'undefined',
+ },
// other options
})
Learn more: unbuild
rollup
// rollup.config.js
+ import replace from '@rollup/plugin-replace'
export default {
plugins: [
+ replace({
+ 'import.meta.vitest': 'undefined',
+ })
],
// other options
}
Learn more: rollup
TypeScript
Per abilitare il supporto TypeScript per import.meta.vitest
, aggiungi vitest/importMeta
al tuo file tsconfig.json
:
// tsconfig.json
{
"compilerOptions": {
"types": [
+ "vitest/importMeta"
]
}
}
Si veda test/import-meta
per un esempio completo.
Note
Questa funzionalità può essere utile per:
- Test unitari per funzioni o utility di piccole dimensioni
- Prototipazione rapida
- Asserzioni inline
Si consiglia di utilizzare file di test separati per test più complessi, come quelli relativi a componenti o test end-to-end.