Skip to content
Vitest 3
Main Navigation Guia & APIConfiguraçãoModo NavegadorAPI Avançada
3.2.0
2.1.9
1.6.1
0.34.6

Português – Brasil

English
简体中文
繁體中文
Español
Français
Русский
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Português – Brasil

English
简体中文
繁體中文
Español
Français
Русский
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Aparência

Sidebar Navigation

Introdução

Por que Vitest

Primeiros Passos

Recursos

Configurando o Vitest

API

Referência da API de Teste

Funções Mock

Vi

expect

expectTypeOf

assert

assertType

Guia

Interface de Linha de Comando

Filtragem de Testes

Projetos de Teste

Reporters

Cobertura

Snapshot

Mocking

Paralelismo

Testando Tipos

Vitest UI

Testes no Código-Fonte

Contexto de Testes

Anotações em Testes

Ambiente de Teste

Estendendo Matchers

Integrações com IDEs

Depuração

Erros Comuns

Guia de Migração

Migrando para o Vitest 3.0

Migrando do Jest

Desempenho

Análise de Desempenho de Testes

Melhorando o Desempenho

Modo Navegador

APIs Avançadas

Comparações com Outros Test Runners

Nesta página

Projetos de Teste ​

Exemplo de Projeto

GitHub - Executar Online

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:

ts
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:

ts
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:

ts
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.

ts
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:

ts
// @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:

json
{
  "scripts": {
    "test": "vitest"
  }
}

Agora os testes podem ser executados com seu gerenciador de pacotes:

bash
npm run test
bash
yarn test
bash
pnpm run test
bash
bun run test

Se você precisar executar testes apenas dentro de um único projeto, use a opção CLI --project:

bash
npm run test --project e2e
bash
yarn test --project e2e
bash
pnpm run test --project e2e
bash
bun run test --project e2e

TIP

A opção CLI --project pode ser utilizada várias vezes para filtrar vários projetos:

bash
npm run test --project e2e --project unit
bash
yarn test --project e2e --project unit
bash
pnpm run test --project e2e --project unit
bash
bun run test --project e2e --project unit

Configuraçã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:

ts
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.

ts
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 processo
  • reporters: apenas os reporters definidos na configuração raiz são suportados
  • resolveSnapshotPath: 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.

Pager
AnteriorFiltragem de Testes
PróximoReporters

Distribuído sob a Licença MIT.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/guide/projects

Distribuído sob a Licença MIT.

Copyright (c) 2021-Present Vitest Team