Saltar al contenido
K0lateral
Programación

Genera tests unitarios con Grok: flujo paso a paso

· (banco local)

Aprende a generar tests unitarios en Python y JavaScript con Grok. Flujo práctico con prompts funcionales para copy-paste. Sin teoría, solo código.

Genera tests unitarios con Grok: flujo paso a paso
(banco local)

Genera tests unitarios con Grok: flujo paso a paso

Mira colega, llevo tiempo usando Grok para generar tests unitarios y te juro que me ha ahorrado horas de trabajo repetitivo. No es magia, es saber cómo pedírselo. Aquí te voy a soltar el flujo que uso yo, paso a paso, con prompts que puedes copiar y pegar directamente.

El flujo que funciona

Primero, ten claro qué quieres testear. No le pidas a Grok que "genere tests para todo" porque te va a soltar una manta de código genérico. Sé específico: dile qué función, qué entradas esperas, qué comportamientos quieres cubrir.

Paso 1: Contexto + código fuente

El truco está en darle el contexto justo. Copia tu función y pídele tests con este prompt:

Prompt para Python

"""

Tengo esta función en Python. Genera tests unitarios usando pytest que cubran:

  • Caso feliz
  • Borde (lista vacía, valores extremos)
  • Error (type mismatch, valores inválidos)

Función:

def calcular_media(numeros):

if not numeros:

return 0

if not all(isinstance(x, (int, float)) for x in numeros):

raise TypeError("Todos los elementos deben ser números")

return sum(numeros) / len(numeros)

Devuélveme solo el código del test, sin explicaciones.

"""

Paso 2: Para JavaScript con Jest

Si trabajas con JS, el enfoque es el mismo pero adaptado. Aquí tienes otro prompt que uso a diario:

// Prompt para JavaScript

/**

  • Dada esta función asíncrona en Node.js, genera tests con Jest.
  • Cubre: éxito, error de validación, error de API externa.
  • Usa mocks para fetch y mockResolvedValue/mockRejectedValue.

*

  • async function obtenerUsuario(id) {
  • if (!id || typeof id !== 'string') throw new Error('ID inválido');
  • const res = await fetch(https://api.example.com/users/${id});
  • if (!res.ok) throw new Error('Error al obtener usuario');
  • return res.json();
  • }

*

  • Dame solo el test file completo.

*/

Paso 3: Tests de integración con fixtures

Para cosas más complejas, como tests que necesitan setup de base de datos o archivos temporales, usa este prompt:

Prompt para tests con fixtures

"""

Genera tests unitarios con pytest para esta clase. Usa fixtures para:

  • Mockear una conexión a base de datos
  • Crear datos de prueba temporales
  • Limpiar después de cada test

Código:

class GestorUsuarios:

def __init__(self, db_conn):

self.db = db_conn

def crear_usuario(self, nombre, email):

if not nombre or not email:

raise ValueError("Nombre y email requeridos")

return self.db.insert("usuarios", {"nombre": nombre, "email": email})

def obtener_usuario(self, user_id):

return self.db.find("usuarios", {"id": user_id})

Incluye también un test parametrizado para múltiples casos de validación.

"""

Paso 4: Test de rendimiento (bonus)

No solo tests unitarios, también puedes pedirle benchmarks básicos. Útil para detectar regresiones:

Prompt para test de rendimiento

"""

Genera un test de rendimiento simple con pytest-benchmark para esta función.

Quiero medir tiempo de ejecución con 1000, 10000 y 100000 elementos.

Usa datos aleatorios generados con random.

Función: calcular_media (la de antes)

Devuélveme el código del benchmark y una breve interpretación de resultados esperados.

"""

Mi workflow real

Cuando tengo que testear un módulo entero, hago esto:

  • Primer prompt: pido tests para la función principal
  • Revisión rápida: miro si cubre los casos que me importan
  • Segundo prompt: pido tests adicionales para edge cases que se me ocurren (valores negativos, strings vacíos, nulls)
  • Ejecuto: pytest o npm test, veo qué falla, ajusto

El truco está en iterar. No esperes que la primera respuesta sea perfecta. Grok es bueno, pero no es adivino. Si ves que se salta algo, dile: "Añade test para cuando el input es None" y te lo genera al momento.

Errores comunes que veo

  • Pedir tests sin contexto: Grok no sabe qué coño quieres si solo le pasas la firma de la función
  • No especificar framework: Si no dices pytest, te puede soltar unittest que es más verboso
  • Aceptar el primer resultado: Siempre revisa. A veces genera tests que prueban cosas obvias y se olvida de lo crítico

Y tú, colega, ¿qué usas para generar tests unitarios? ¿Grok, ChatGPT, o sigues escribiéndolos a mano como un kamikaze?

Más sobre Programación

Ver todo →