Profundidade de propagação
Esta é a configuração central. Para cada arquivo, você decide até onde a execução se propaga no grafo reverso, ou seja, através de quem importa o arquivo.
| Valor | Saltos | Significado |
|---|---|---|
"self" | 0 | apenas os testes do arquivo alterado |
"direct" | 1 | o arquivo + quem o importa diretamente (padrão) |
"transitive" | ∞ | o arquivo + toda a cadeia de importadores |
n | n | profundidade numérica exata |
Experimente
Escolha uma profundidade e veja, agora, o que aconteceria ao salvar login.ts. É a mesma busca em largura que roda no daemon.
A regra que produz isso
Repare que self ainda roda um teste. A propagação percorre arestas de import; o mapeamento de um arquivo-fonte para o seu arquivo de teste acontece depois, por convenção de nome. Colapsar as duas etapas faria self não rodar nada, porque o teste está a um salto do fonte.
Configurando
{
"dependencyDepth": {
"default": "direct",
"overrides": {
"src/util/**": "self", // utilitário estável: não propaga
"src/components/Login.tsx": "transitive" // crítico: propaga até o fim
}
}
}Os overrides são avaliados na ordem de declaração e o último que casar vence, o que permite escrever uma regra ampla seguida de exceções:
"overrides": {
"src/**": "self", // regra geral
"src/components/Login.tsx": "transitive" // exceção
}Escolhendo um valor
Testes demais rodando (lento). Um arquivo importado por meio projeto, como um módulo de tipos ou um arquivo de constantes, arrasta a suíte inteira a cada save. Prenda em "self".
Testes de menos rodando (regressões passam). Um arquivo cuja quebra só aparece nos consumidores, tipicamente autenticação, roteamento ou serialização, merece "transitive".
Sem certeza. Deixe "direct". É o padrão porque pega o caso comum, o importador que quebrou, sem pagar pela cadeia inteira.
Conferindo antes de assumir
$ npx livetest why src/login.tsarquivo: src/login.ts
runner: js
profundidade: transitive, arquivo + cadeia completa de importadores [override: src/login.ts]
arquivos impactados (8):
[0] src/login.ts
[1] src/header.ts
[2] src/layout.ts via src/header.ts
...Também dá para experimentar uma profundidade sem editar o arquivo de configuração:
npx livetest run src/login.ts --depth transitive
npx livetest why src/login.ts --depth selfO grafo não é onisciente
Import dinâmico com expressão calculada, injeção de dependência e reflexão não aparecem no grafo. O livetest why avisa sobre os especificadores que não conseguiu resolver. Nesses arquivos, considere uma profundidade maior ou rode a suíte inteira antes de concluir que está tudo certo.