Resumen

Escribir pruebas unitarias puede ser una tarea repetitiva, pero con herramientas de inteligencia artificial como GitHub Copilot y ChatGPT es posible acelerar significativamente el proceso. Desde funciones utilitarias simples hasta componentes de React, estas herramientas comprenden el contexto de tu código y generan casos de prueba relevantes, aunque siempre con la necesidad de revisión humana para evitar errores y alucinaciones.

¿Cómo genera Copilot pruebas para funciones utilitarias en JavaScript?

El punto de partida es un proyecto de React configurado con Jest y React Testing Library [0:10]. Dentro de la carpeta Utils existe una función que calcula el total del precio de productos. Al crear el archivo de test e importar la función, Copilot detecta el contexto y comienza a autocompletar las pruebas.

Los casos que sugiere son directos:

  • Retornar cero cuando no se pasa ningún producto (arreglo vacío).
  • Retornar el total de un solo producto.
  • Retornar el precio sumado de múltiples productos.

Es importante revisar la sintaxis generada, ya que en ocasiones Copilot no retorna el código completo y puede faltar un paréntesis o un import incorrecto [1:08]. Tras corregir el import, las pruebas pasan sin problemas.

¿Se puede aplicar TDD con Copilot?

No solo sirve para código existente. También es posible trabajar con TDD (Test Driven Development) [1:30], escribiendo primero las pruebas de una función que aún no existe. Al crear un test para una función compareDates e importarla desde un archivo inexistente, Copilot sugiere autocompletados basados en el nombre de la función.

Sin embargo, las primeras sugerencias no siempre son útiles. Copilot ofrece alternativas de autocompletado que puedes explorar posándote sobre el código [2:10]. Si ninguna encaja, lo mejor es escribir un prompt más específico: "Escribe un test para la función comparar fechas, que chequea si la segunda fecha es mayor que la primera, y la función recibe dos objetos de tipo Date de JavaScript" [2:50].

Con ese contexto más preciso, Copilot genera:

  • Un caso donde la segunda fecha es mayor que la primera (retorna true).
  • El caso contrario, donde la segunda fecha es menor (retorna false).

Al volver al archivo de la función, Copilot ya tiene el contexto de los tests y genera automáticamente la implementación correcta [3:30].

¿Qué sucede al probar componentes de React con Copilot?

El componente OrdersCart recibe dos props: totalPrice y totalProducts, y los renderiza [4:00]. Al crear el archivo de test e importar el componente, Copilot detecta la configuración de React Testing Library en el entorno y genera pruebas como:

  • Un snapshot del componente.
  • Verificar que renderiza correctamente el precio total.
  • Verificar la cantidad correcta de productos.
  • Una prueba sobre una fecha que el componente no maneja.

Este último caso es un ejemplo claro de alucinación [6:50]: Copilot genera un test para un prop de tipo date que no existe en el componente. Detectar y eliminar estos tests inventados es fundamental.

¿Cómo agregar pruebas propias guiadas por Copilot?

También puedes escribir la descripción del test y dejar que Copilot complete la implementación [5:05]. Por ejemplo, al escribir "debe renderizar correctamente cuando no hay artículos", Copilot sugiere verificar que el componente muestre cero artículos.

Durante la ejecución de las pruebas aparecieron errores reales:

  • Faltaba importar el método render de React Testing Library [5:40].
  • El componente no manejaba props vacías, mostrando undefined en lugar de cero [6:05].

Este segundo error reveló un bug real en el componente, que se corrigió agregando default props con valor cero para totalPrice y totalProducts [6:15]. También fue necesario agregar la configuración del DOM (@testing-library/jest-dom) para que el matcher toBeInTheDocument funcione [6:30].

¿Qué diferencias ofrece ChatGPT frente a Copilot para testing?

ChatGPT permite un enfoque diferente: se le proporciona el componente completo junto con un prompt explícito como "Eres un experto en desarrollo front end con JavaScript y React. Escribe las pruebas unitarias del siguiente componente utilizando Jest y React Testing Library" [7:20].

Las diferencias notables son:

  • ChatGPT sugiere probar las default props correctamente.
  • Prueba ambas props al mismo tiempo en lugar de por separado.
  • Incluye una explicación de cada test generado.
  • Va más al punto con menos código redundante [7:55].

Es clave especificar la tecnología de testing en el prompt, ya que React Testing Library no es la única opción disponible.

El sentido crítico al usar estas herramientas es indispensable. Tanto Copilot como ChatGPT aceleran el flujo de trabajo, pero la responsabilidad de validar que cada test tenga sentido recae completamente en quien desarrolla. ¿Qué herramientas de IA has utilizado para escribir pruebas unitarias y cuáles te han dado mejores resultados? Comparte tu experiencia en los comentarios.