Projetos de Teste
Exemplo de Projeto
WARNING
Este recurso também é conhecido como workspace. O workspace foi descontinuado desde a versão 3.2 e substituído pela configuração projects. Ambos são funcionalmente equivalentes.
O Vitest oferece uma forma de definir múltiplas configurações de projeto dentro de um único processo Vitest. Este recurso é particularmente útil para configurações de monorepo, mas também pode ser usado para executar testes com diferentes configurações, como resolve.alias, plugins, test.browser e muito mais.
Definindo Projetos
Você pode definir projetos em seu config raiz:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: ['packages/*'],
},
});As configurações de projeto podem ser configurações inline, arquivos ou padrões glob que referenciam seus projetos. Por exemplo, se você tem uma pasta chamada packages que contém seus projetos, você pode definir um array em sua configuração raiz do Vitest:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: ['packages/*'],
},
});O Vitest tratará cada pasta em packages como um projeto separado, mesmo que não contenha um arquivo de configuração. Se este padrão glob corresponder a qualquer arquivo, ele será considerado uma configuração do Vitest, mesmo que não tenha vitest em seu nome ou tenha uma extensão de arquivo incomum.
WARNING
O Vitest não trata o arquivo vitest.config raiz como um projeto, a menos que seja explicitamente especificado na configuração. Consequentemente, a configuração raiz afetará apenas opções globais, como reporters e coverage. Observe que o Vitest sempre executará certos hooks de plugin, como apply, config, configResolved ou configureServer, especificados no arquivo de configuração raiz. O Vitest também usa os mesmos plugins para executar configurações globais e para o provedor de coverage personalizado.
Você também pode referenciar projetos por meio de seus arquivos de configuração:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: ['packages/*/vitest.config.{e2e,unit}.ts'],
},
});Este padrão incluirá apenas projetos com um arquivo vitest.config que contenha e2e ou unit antes da extensão.
Você também pode definir projetos usando configuração inline. A configuração suporta ambas as sintaxes simultaneamente.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: [
// corresponde a todas as pastas e arquivos dentro da pasta `packages`
'packages/*',
{
// adicione "extends: true" para herdar as opções da configuração raiz
extends: true,
test: {
include: ['tests/**/*.{browser}.test.{ts,js}'],
// é recomendado definir um nome ao usar configurações inline
name: 'happy-dom',
environment: 'happy-dom',
},
},
{
test: {
include: ['tests/**/*.{node}.test.{ts,js}'],
// a cor do label do nome pode ser alterada
name: { label: 'node', color: 'green' },
environment: 'node',
},
},
],
},
});WARNING
Todos os projetos devem ter nomes únicos; caso contrário, o Vitest gerará um erro. Se um nome não for fornecido na configuração inline, o Vitest atribuirá um número. Para configurações de projeto definidas com sintaxe glob, o Vitest usará por padrão a propriedade "name" no arquivo package.json mais próximo ou, se não existir, o nome da pasta.
Os projetos não suportam todas as propriedades de configuração disponíveis. Para uma melhor segurança de tipos, use o método defineProject em vez de defineConfig dentro dos arquivos de configuração do projeto:
// @errors: 2769
import { defineProject } from 'vitest/config';
export default defineProject({
test: {
environment: 'jsdom',
// "reporters" não é suportado em uma configuração de projeto,
// então mostrará um erro
reporters: ['json'],
},
});Executando testes
Para executar testes, defina um script em seu package.json raiz:
{
"scripts": {
"test": "vitest"
}
}Agora os testes podem ser executados com seu gerenciador de pacotes:
npm run testyarn testpnpm run testbun run testSe você precisar executar testes apenas dentro de um único projeto, use a opção CLI --project:
npm run test --project e2eyarn test --project e2epnpm run test --project e2ebun run test --project e2eTIP
A opção CLI --project pode ser utilizada várias vezes para filtrar vários projetos:
npm run test --project e2e --project unityarn test --project e2e --project unitpnpm run test --project e2e --project unitbun run test --project e2e --project unitConfiguração
Nenhuma das opções de configuração é herdada do arquivo de configuração de nível raiz. Você pode criar um arquivo de configuração compartilhado e mesclá-lo com a configuração do projeto por conta própria:
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';
export default mergeConfig(
configShared,
defineProject({
test: {
environment: 'jsdom',
},
})
);Além disso, você pode usar a opção extends para herdar de sua configuração de nível raiz. Todas as opções serão combinadas.
import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
test: {
pool: 'threads',
projects: [
{
// herdará opções desta configuração, como plugins e pool
extends: true,
test: {
name: 'unit',
include: ['**/*.unit.test.ts'],
},
},
{
// não herdará nenhuma opção desta configuração
// este é o comportamento padrão
extends: false,
test: {
name: 'integration',
include: ['**/*.integration.test.ts'],
},
},
],
},
});Opções Não Suportadas
Algumas das opções de configuração não são permitidas em uma configuração de projeto. Mais notadamente:
coverage: a cobertura é feita para todo o processoreporters: apenas os reporters definidos na configuração raiz são suportadosresolveSnapshotPath: apenas o resolvedor de nível raiz é considerado- todas as outras opções que não afetam diretamente os executores de teste
Todas as opções de configuração que não são suportadas dentro de uma configuração de projeto são marcadas com * no guia "Config". Elas devem ser definidas uma vez no arquivo de configuração raiz.