Solución de problemas

Cada entrada parte de lo que ves. En todos los casos, -v escribe cada decisión y su motivo en stderr; ese registro responde a la mayoría de las preguntas y es lo que debes enviarnos.

td affected --base origin/main -v

Se ejecutó todo el proyecto de pruebas

Busca el proyecto en la salida: el motivo aparece a su lado. Las causas habituales son un archivo que afecta a toda la compilación, un archivo que no es de C# dentro del proyecto, un global using o un tipo que se encuentra por reflexión. Qué lo ejecuta todo los enumera todos. En el registro de -v, una línea como affects whole project: True nombra el archivo.

No se usó ningún mapa de cobertura

Sin un mapa, la selección rastrea nombres, lo que es más amplio. El registro indica por qué no lo había:

No se encuentra el commit base

TestDetta compara tu rama con la merge base, así que necesita el historial de ambas. La acción se detiene con:

TestDetta compares with a base commit and needs the full history. Use actions/checkout with fetch-depth: 0.

Haz el checkout con fetch-depth: 0. En otros sistemas de CI, desactiva los clones superficiales y descarga la rama de destino con un refspec explícito, como se muestra para cada sistema en otros sistemas de CI.

Se omitieron menos pruebas de lo esperado

El filtro no coincidió con ninguna prueba

Cuando el filtro de un proyecto no selecciona ninguna prueba, TestDetta vuelve a ejecutar el proyecto sin el filtro y registra The filter for … matched no test; running it unfiltered. No se pasa nada por alto, pero es un error por nuestra parte: envíanos el registro de -v.

Squash merges, rebases y force pushes

Los mapas se registran para los commits de la rama predeterminada, y una pull request encuentra el más reciente en su merge base o antes. Un squash merge o un rebase crea commits nuevos en la rama predeterminada; el siguiente push registra un mapa para ellos y, hasta entonces, las pull requests usan el mapa anterior a través del drift bridge. Un force push a la rama de una pull request no cambia nada: la merge base se vuelve a calcular.

Pull requests desde forks

Los sistemas de CI no pasan secretos a las pull requests desde forks. Los repositorios públicos no necesitan licencia, así que para ellos no cambia nada. En un repositorio privado, una ejecución sin licencia ejecuta todas las pruebas, como lo haría sin TestDetta.

Preguntas

¿Es completa la cobertura de código de una ejecución seleccionada?

No. Una ejecución que omite pruebas produce una cobertura parcial. Publica la cobertura de las ejecuciones completas en la rama predeterminada; allí el registro ejecuta todas las pruebas.

¿Se pueden reintentar las pruebas?

Sí, con la opción de reintento de tu propio framework: todo lo que va después de -- se pasa a dotnet test sin cambios.

¿Se pueden repartir las pruebas seleccionadas entre jobs en paralelo?

td affected --format commands imprime un comando dotnet test por proyecto de pruebas, con su filtro. Reparte las líneas entre tus jobs.