Só o que mudou
--changed e --files restringem a medição a um conjunto de arquivos e transformam o resultado em
veredito: qualquer coisa que fique descoberta neles reprova a rodada.
--changed=<ref>
sonda test --changed=origin/master
Mede só os arquivos do <source> alterados desde o merge-base com a referência: commitados,
modificados e novos. Num clone raso, sem história em comum para achar o merge-base, a própria
referência é a base, que é o que o CI entrega (CI_MERGE_REQUEST_DIFF_BASE_SHA no GitLab, veja
GitLab).
O veredito exige 100% do que mudou: as linhas que o diff acrescentou ou trocou e os métodos e funções em que elas caem, inteiros; arquivo novo é cobrado inteiro. Uma lacuna antiga em outro método do mesmo arquivo não reprova. Uma view do Blade entra no veredito inteira, como um método: uma linha alterada numa view cobra as linhas e os branches da view toda.
Quando sobra algo, o comando lista e sai com erro:
Coverage: lines 118/120 (98.33%), branches 61/63 (96.83%)
Of what changed: lines 40/42 (95.24%), branches 18/20 (90.00%)
Uncovered:
app/Actions/Scheduling/BookAppointmentAction.php: lines 57-58; branches 57-60
app/Models/ScheduleResource.php: branches 272
Cada linha de Uncovered: diz o arquivo, as linhas nunca executadas (em faixas) e os branches nunca
tomados (pelas linhas da decisão). Quando não sobra nada, o código de saída é zero e o comando
imprime What changed is 100% covered.
Quando nenhum arquivo do <source> mudou, não há o que medir e o comando diz isso:
No changed file inside <source>: nothing to measure.
Esse é o uso pensado para o CI: um job que mede só o que o merge request tocou e exige 100% disso.
Com --code-quality e --cobertura, o GitLab marca as linhas cobertas no diff do MR e aponta, na
própria linha, o que ainda precisa de teste.
--files=a,b
sonda test --files=app/Models/Order.php,app/Actions/PlaceOrder.php
Cobra os arquivos listados inteiros, mesmo quando também mudaram. O veredito e a saída são os mesmos
do --changed; quando não sobra nada, o comando imprime The changed files are 100% covered.
Pisos para o projeto inteiro
--min-lines=<n> e --min-branches=<n> reprovam a rodada quando a cobertura do projeto inteiro
fica abaixo de n%. São um piso global, além dos 100% do que mudou:
sonda test --changed=origin/master --min-lines=99 --min-branches=98
Com piso, o Sonda instrumenta e mede o <source> inteiro mesmo com --changed ou --files, cujo
veredito continua olhando só os arquivos deles; o total impresso é o do projeto. Quando um piso não
é atingido:
Coverage below the minimum: lines 98.70% < 99.00%
Duas consequências do piso para ter em mente:
- Quando nenhum arquivo do
<source>mudou, o projeto inteiro é medido mesmo assim, para o piso poder ser conferido:No changed file inside <source>: with a coverage floor, the whole project is measured. - O
--affectedé deixado de lado, porque só a suíte inteira responde pelo projeto inteiro:--affected ignored: with a coverage floor, the whole suite runs.