Skip to content
Vitest 1
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

Reporters

Cobertura

Snapshot

Mocking

Testando Tipos

Vitest UI

Modo Navegador

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

Otimizando o Desempenho

API

Referência da API de Teste

Funções Mock

Vi

expect

expectTypeOf

assert

assertType

Configuração

Gerenciando o Arquivo de Configuração do Vitest

Configurando o Vitest

Nesta página

Expandindo Matchers ​

Como o Vitest é compatível com Chai e Jest, você pode usar a API chai.use ou expect.extend, dependendo da sua preferência.

Este guia explorará como estender matchers com expect.extend. Se você estiver interessado na API do Chai, consulte o guia deles.

Para estender os matchers padrão, chame expect.extend com um objeto contendo seus matchers personalizados.

ts
expect.extend({
  toBeFoo(received, expected) {
    const { isNot } = this;
    return {
      // Não altere o valor de 'pass' com base em isNot, pois o Vitest lida com isso automaticamente
      pass: received === 'foo',
      message: () => `${received} ${isNot ? 'não é ' : 'é '}foo`,
    };
  },
});

Se você estiver usando TypeScript, a partir do Vitest 0.31.0, você pode estender a interface Assertion padrão em um arquivo de declaração de ambiente (por exemplo: vitest.d.ts) com o código abaixo:

ts
import type { Assertion, AsymmetricMatchersContaining } from 'vitest';

interface CustomMatchers<R = unknown> {
  toBeFoo: () => R;
}

declare module 'vitest' {
  interface Assertion<T = any> extends CustomMatchers<T> {}
  interface AsymmetricMatchersContaining extends CustomMatchers {}
}

WARNING

Não se esqueça de incluir o arquivo de declaração de ambiente no seu tsconfig.json.

O valor de retorno de um matcher deve ser compatível com a seguinte interface:

ts
interface MatcherResult {
  pass: boolean;
  message: () => string;
  // Se você fornecer estes valores, eles aparecerão automaticamente dentro de um diff quando
  // o matcher falhar, então você não precisa imprimir o diff manualmente
  actual?: unknown;
  expected?: unknown;
}

WARNING

Se você criar um matcher assíncrono, não se esqueça de usar await ao chamar o matcher (await expect('foo').toBeFoo()) no teste em si.

O primeiro argumento dentro da função do matcher é o valor recebido (aquele dentro de expect(received)). Os demais argumentos são os valores passados diretamente para o matcher.

A função do matcher tem acesso ao contexto this com as seguintes propriedades:

  • isNot

    Retorna true se o matcher foi chamado com .not (expect(received).not.toBeFoo()).

  • promise

    Se o matcher foi chamado em resolved/rejected, este valor conterá o nome do modificador; caso contrário, será uma string vazia.

  • equals

    Esta é uma função utilitária que permite comparar dois valores. Ela retornará true se os valores forem iguais e false caso contrário. Essa função é usada internamente na maioria dos matchers. Ela suporta objetos com matchers assimétricos por padrão.

  • utils

    Contém um conjunto de funções utilitárias que você pode usar para formatar mensagens.

O contexto this também contém informações sobre o teste atual. Você também pode obtê-lo chamando expect.getState(). As propriedades mais úteis são:

  • currentTestName

    Nome completo do teste atual (incluindo o bloco de describe).

  • testPath

    Caminho para o arquivo de teste atual.

Pager
AnteriorAmbiente de Teste
PróximoIntegrações de IDE

Distribuído sob a Licença MIT.

Copyright (c) 2024 Mithril Contributors

https://v1.vitest.dev/guide/extending-matchers

Distribuído sob a Licença MIT.

Copyright (c) 2024 Mithril Contributors