Skip to content
Vitest 0
Main Navigation GuiaAPIConfiguraçãoAvançado
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

Guia

Por que Vitest

Primeiros Passos

Recursos

Workspace

Interface de Linha de Comando

Filtrando Testes

Cobertura

Snapshot

Mocking

Testando Tipos de Dados

Vitest UI

Modo Navegador (experimental)

Testes no Código Fonte

Contexto de Teste

Ambiente de Teste

Expandindo Matchers

Integrações de IDE

Depuração

Comparações com Outros Executores de Teste

Guia de Migração

Erros Comuns

API

Referência da API de Teste

Funções Mock

Vi

expect

expectTypeOf

assertType

Configuração

Configurando o Vitest

Nesta página

Testando Tipos de Dados ​

O Vitest permite que você escreva testes para seus tipos, usando as sintaxes expectTypeOf ou assertType. Por padrão, todos os testes dentro de arquivos *.test-d.ts são considerados testes de tipo, mas você pode alterar isso com a opção de configuração typecheck.include.

Internamente, o Vitest chama tsc ou vue-tsc, dependendo da sua configuração, e processa os resultados. O Vitest também reportará erros de tipo no seu código-fonte, caso encontre algum. Você pode desativar essa funcionalidade com a opção de configuração typecheck.ignoreSourceErrors.

É importante notar que o Vitest não executa ou compila esses arquivos; eles são apenas analisados estaticamente pelo compilador. Portanto, você não pode usar nenhuma declaração dinâmica. Isso significa que você não pode usar nomes dinâmicos para testes e APIs como test.each, test.runIf, test.skipIf e test.concurrent. No entanto, você pode usar outras APIs, como test, describe, .only, .skip e .todo.

O uso de opções da CLI, como --allowOnly e -t, também é suportado para a verificação de tipo.

ts
import { assertType, expectTypeOf } from 'vitest';
import { mount } from './mount.js';

test('my types work properly', () => {
  expectTypeOf(mount).toBeFunction();
  expectTypeOf(mount).parameter(0).toMatchTypeOf<{ name: string }>();

  // @ts-expect-error name is a string
  assertType(mount({ name: 42 }));
});

Qualquer erro de tipo detectado dentro de um arquivo de teste será tratado como um erro de teste. Isso permite que você use qualquer técnica de tipagem que desejar para testar os tipos do seu projeto.

Você pode encontrar uma lista de matchers disponíveis na seção API.

Interpretando Erros ​

Se você estiver usando a API expectTypeOf, pode encontrar erros difíceis de interpretar ou que parecem inesperados:

ts
expectTypeOf(1).toEqualTypeOf<string>();
//             ^^^^^^^^^^^^^^^^^^^^^^
// index-c3943160.d.ts(90, 20): Arguments for the rest parameter 'MISMATCH' were not provided.

Isso ocorre devido à forma como a biblioteca expect-type lida com erros de tipo.

Infelizmente, o TypeScript não fornece metadados de tipo sem correções, então não podemos fornecer mensagens de erro mais claras no momento. No entanto, há desenvolvimento em andamento no projeto TypeScript para corrigir isso. Se você deseja mensagens melhores, incentive a equipe do TypeScript a analisar o PR mencionado.

Se você achar difícil trabalhar com a API expectTypeOf e identificar erros, você sempre pode usar a API assertType, que é mais simples:

ts
const answer = 42;

assertType<number>(answer);
// @ts-expect-error answer is not a string
assertType<string>(answer);

TIP

Ao usar a sintaxe @ts-expect-error, é recomendável que você se certifique de que não cometeu um erro de digitação. Você pode fazer isso incluindo seus arquivos de tipo na opção de configuração test.include, para que o Vitest também execute esses testes e falhe com ReferenceError.

Este teste passará, pois espera-se um erro, mas a palavra "answer" tem um erro de digitação, então é um falso positivo:

ts
// @ts-expect-error answer is not a string
assertType<string>(answr); //

Executando a verificação de tipos ​

Adicione este comando à sua seção scripts em package.json:

json
{
  "scripts": {
    "typecheck": "vitest typecheck"
  }
}

Agora você pode executar o typecheck:

sh
# npm
npm run typecheck

# yarn
yarn typecheck

# pnpm
pnpm run typecheck

O Vitest usa tsc --noEmit ou vue-tsc --noEmit, dependendo da sua configuração. Portanto, você pode remover esses scripts do seu pipeline.

Pager
AnteriorMocking
PróximoVitest UI

Distribuído sob a Licença MIT.

Copyright (c) 2024 Mithril Contributors

https://v0.vitest.dev/guide/testing-types

Distribuído sob a Licença MIT.

Copyright (c) 2024 Mithril Contributors