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

Avançado

API do Node

Executor de Teste

Metadados da Tarefa

Estendendo os reporters

Pool Customizado

Nesta página

Metadados da Tarefa ​

WARNING

O Vitest expõe uma API privada experimental. Alterações que quebrem a compatibilidade podem não seguir o versionamento semântico (semver). Ao utilizá-la, defina a versão do Vitest para evitar problemas.

Se você está desenvolvendo um reporter customizado ou utilizando a API Node.js do Vitest, pode ser útil passar dados dos testes em execução para o seu reporter ou manipulador customizado do Vitest, em diferentes contextos.

Para isso, confiar no contexto de teste não é uma solução viável, já que ele não pode ser serializado. No entanto, o Vitest permite utilizar a propriedade meta disponível em cada tarefa (suite ou teste) para compartilhar dados entre seus testes e o processo Node.js. É importante notar que essa comunicação é unidirecional, já que a propriedade meta só pode ser modificada dentro do contexto de teste. Qualquer alteração feita no contexto Node.js não será visível em seus testes.

Você pode preencher a propriedade meta no contexto de teste ou dentro dos hooks beforeAll/afterAll para tarefas de suíte.

ts
afterAll((suite) => {
  suite.meta.done = true
})

test('custom', ({ task }) => {
  task.meta.custom = 'some-custom-handler'
})

Após a conclusão de um teste, o Vitest enviará uma tarefa, incluindo o resultado e meta, para o processo Node.js usando RPC (Chamada de Procedimento Remoto). Para interceptar e processar essa tarefa, você pode utilizar o método onTaskUpdate disponível na sua implementação de reporter:

ts
// custom-reporter.js
export default {
  // você pode interceptar pacotes se necessário
  onTaskUpdate(packs) {
    const [id, result, meta] = packs[0]
  },
  // meta está localizado em cada tarefa dentro de "onFinished"
  onFinished(files) {
    files[0].meta.done === true
    files[0].tasks[0].meta.custom === 'some-custom-handler'
  }
}

WARNING

O Vitest pode enviar várias tarefas simultaneamente se vários testes forem concluídos em um curto período de tempo.

ATENÇÃO

O Vitest utiliza diferentes métodos para se comunicar com o processo Node.js.

  • Se o Vitest executa testes em worker threads, ele enviará dados via message port.
  • Se o Vitest utiliza child process, os dados serão enviados como um Buffer serializado via API process.send.
  • Se o Vitest executa testes no browser, os dados serão stringificados utilizando o pacote flatted.

A regra geral é que você pode enviar quase qualquer coisa, exceto funções, Promises e regexp (o v8.stringify não pode serializá-los, mas você pode enviar uma versão em string e analisá-la no processo Node.js). Você pode ter referências cíclicas dentro dos dados.

Além disso, certifique-se de serializar as propriedades de Error antes de defini-las.

Você também pode obter essas informações do estado do Vitest após a conclusão da execução dos testes:

ts
const vitest = await createVitest('test')
await vitest.start()
vitest.state.getFiles()[0].meta.done === true
vitest.state.getFiles()[0].tasks[0].meta.custom === 'some-custom-handler'

Também é possível estender as definições de tipo ao usar TypeScript:

ts
declare module 'vitest' {
  interface TaskMeta {
    done?: boolean
    custom?: string
  }
}
Pager
AnteriorExecutor de Teste
PróximoEstendendo os reporters

Distribuído sob a Licença MIT.

Copyright (c) 2024 Mithril Contributors

https://v1.vitest.dev/advanced/metadata

Distribuído sob a Licença MIT.

Copyright (c) 2024 Mithril Contributors