Construir y refactorizar con los tests primero
Pide los tests antes de la implementación y lanza el runner de tests para constatar que fallan de verdad: el rojo prueba que el test puede fallar, el verde que la implementación lo satisface. Claude reproduce el estilo de los tests ya presentes en el repositorio, y el refactor avanza una preocupación a la vez.
Claude examina los archivos de test ya presentes en un repositorio para reproducir su estilo, su framework de test y sus convenciones de aserción, en lugar de imponer una convención ajena al proyecto. El gesto consiste en pedir esos tests antes de escribir la implementación que deben verificar, y luego lanzar el runner de tests para constatar que fallan.
Confirmar el rojo antes de pedir el verde
Esta secuencia, conocida en ingeniería de software como rojo, verde, refactor, no depende de ninguna funcionalidad específica de Claude Code, sigue siendo válida con cualquier herramienta. El rojo prueba que el test puede fallar, el verde prueba que la implementación lo satisface, y saltar directamente al verde sin haber visto el rojo deja abierta la pregunta de si el test habría pasado incluso sin ninguna implementación.
El siguiente ejemplo usa datos propios. Un test espera que una función calculerRemise aplique un diez por ciento de descuento, incluso antes de que esa función exista.
function testCalculerRemise() {
const resultat = calculerRemise(200);
console.assert(resultat === 180, "attendu 180, obtenu " + resultat);
}
testCalculerRemise();
// ReferenceError: calculerRemise is not defined, el rojo esperado
Una vez constatado ese rojo, la implementación mínima basta para hacerlo pasar a verde.
function calculerRemise(prix) {
return prix * 0.9;
}
testCalculerRemise();
// ninguna salida: la aserción es verdadera, el test está en verde
Refactorizar una preocupación a la vez
El runner de tests permanece activo durante todo el refactor que sigue, y cada modificación se centra en una sola preocupación, un solo nombre renombrado, una sola función extraída, nunca varias a la vez en el mismo turno. Esta disciplina aísla la regresión: si el runner de tests falla después de un cambio, la causa está en ese cambio concreto, no en un conjunto de modificaciones apiladas que habría que desenredar. Pedirle explícitamente a Claude que identifique los casos límite no cubiertos antes de considerar terminada una serie de tests completa la serie, en particular con las entradas vacías, negativas o fuera de rango que la implementación inicial suele ignorar.
Esta exigencia de prueba ejecutada ya aparecía en el test de regresión que cierra una corrección de bug, donde la confianza también viene de una salida leída.
Poner a prueba los tests con mutantes
Un test en verde prueba que el código pasa, no que el test detecte un fallo. Un mutante es un fallo inyectado a propósito en una copia del código: si la suite sigue pasando, es ciega a ese fallo. El script crea una función y su test, y luego un mutante que cambia 0.9 por 0.8.
cat > remise.js << 'EOF'
function calculerRemise(prix) { return prix * 0.9; }
module.exports = { calculerRemise };
EOF
cat > test.js << 'EOF'
const { calculerRemise } = require('./remise.js');
if (calculerRemise(200) !== 180) { console.log('ECHEC'); process.exit(1); }
console.log('OK');
EOF
node test.js
cp remise.js remise.orig.js
sed -i 's/0\.9/0.8/' remise.js
node test.js; echo "code=$?"
cp remise.orig.js remise.js
node test.js
OK
ECHEC
code=1
OK
El mutante queda eliminado, porque el test falla. Lanza primero solo el test dirigido, más rápido que la suite entera, y después la suite completa para los mutantes supervivientes únicamente. Restaura la copia original entre dos mutantes, y comprueba que el código original pasa, porque si no un fallo no prueba nada.
La no regresión se construye
Cuando una corrección cambia lo que cuenta una regla de detección, enumerar las formas que no hay que perder fracasa: un verificador siempre encuentra una más. Guarda mejor la regla antigua aparte, juzga las mismas entradas con la antigua y la nueva, y exige que toda diferencia venga de la consigna. Para un contador de palabras que pasa de separar por un espacio a separar por cualquier serie de espacios, la diferencia esperada afecta a los espacios de más, y solo a ellos.
Rojo, verde, refactor
Una desarrolladora le pide a Claude Code que escriba un test para una función de cálculo de descuento antes de escribir esa función. Ejecuta ese test y lee el mensaje de error mostrado en la terminal.
Escribe en una frase lo que esta situación establece, y en una frase lo que no establece.
Lo que esto establece: Este resultado establece que el test se escribió y ejecutó antes de la existencia de la función que debe verificar, y que efectivamente se produjo un mensaje de error en ese momento.
Lo que esto no establece: No establece que la implementación que vendrá después satisfaga ese test, ya que todavía no se ha escrito ninguna función calculerRemise.
Los tres calibrados falsos más frecuentes
- Demasiado amplio Este resultado prueba que todos los tests escritos por Claude Code en este proyecto fallarán sistemáticamente antes de la implementación.
- Demasiado estrecho Este resultado no muestra nada ya que solo se observó un mensaje de error en una única terminal.
- Fuera de tema Este resultado muestra que la terminal usada por la desarrolladora muestra los mensajes de error en color.
- Claude examina los archivos de test ya presentes en el repositorio para reproducir su estilo y sus convenciones de aserción, en lugar de imponer una nueva.
- El rojo prueba que el test puede fallar y el verde prueba que la implementación lo satisface, saltar directamente al verde deja abierta la cuestión de un test que hubiera pasado sin implementar nada.
- Un refactor se centra en una sola preocupación a la vez, con el runner de tests activo de manera continua, para aislar la causa de cada regresión.
- Pedir explícitamente los casos límite no cubiertos, entradas vacías, negativas o fuera de rango, completa una serie de tests que la implementación inicial suele ignorar.
- Un mutante inyectado en una copia del código debe hacer fallar el test dirigido, y una corrección se juzga comparando regla antigua y nueva sobre las mismas entradas.
Elige una pequeña función que todavía tengas que escribir hoy, pide a Claude Code que escriba primero el test a partir de las convenciones de tu proyecto, ejecuta ese test para verificar que falla, y luego escribe la implementación mínima que lo hace pasar a verde.
Cada afirmación datable de esta lección remite aquí al texto público que la respalda. Una fuente que no se abre no prueba nada.
- Claude Code, flujos de trabajo habituales, trabajar con los tests consultée le 2026-09-02