Generar tests unitarios
Las pruebas que realmente atrapan errores casi nunca son las del camino feliz que se le ocurren primero; son el arreglo vacío, el campo nulo, el número negativo que nadie esperaba que llegara a esa función. Este endpoint lee una función o módulo y devuelve una suite de tests que cubre los casos obvios y los que solo se descubren después de un incidente en producción.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
La brecha entre cobertura y confianza
Es perfectamente posible alcanzar un 90% de cobertura de líneas sin haber probado nunca qué pasa cuando una lista está vacía, una cadena es inesperadamente larga, o dos entradas individualmente válidas se combinan en un estado inválido. El porcentaje de cobertura mide qué líneas se ejecutaron, no qué modos de falla se consideraron, y esa diferencia es exactamente por donde se cuelan la mayoría de las regresiones. Este endpoint está construido para cerrar ese vacío específico en vez de maximizar un número de cobertura.
Qué envía y qué obtiene
Envía una función, clase o módulo junto con su lenguaje y el framework de pruebas que usa, como Jest, PyTest, PHPUnit o JUnit. La respuesta es un archivo de tests ejecutable, escrito con la sintaxis y las convenciones de ese framework, organizado en casos claramente nombrados: entradas normales, valores límite, entradas vacías o nulas, y cualquier condición de error que la propia lógica de la función sugiera, como una división que podría llegar a cero o una búsqueda que podría no encontrar nada.
Por qué los casos límite específicamente
Las pruebas de frontera y casos límite son una de las disciplinas más antiguas en calidad de software por una razón: los errores se agrupan en las fronteras, en los errores de conteo por uno, en las sorpresas de coerción de tipos, y en las costuras entre dos piezas de lógica que se validaron por separado. Un generador de pruebas que solo refleja el camino feliz de la función agrega archivos a su repositorio sin agregar protección real, así que este endpoint está afinado específicamente para razonar sobre qué podría salir mal con cada parámetro, no solo sobre lo que la función hace cuando todo sale bien.
Cómo encaja en flujos de trabajo reales
El patrón habitual es generar un archivo de tests inicial para una función que no tiene ninguno, y luego un desarrollador lo revisa y recorta lo que no aplique, porque no todos los casos sugeridos importarán para cada base de código. También encaja bien justo después de corregir un error: envía la función ya corregida y pide específicamente un caso de regresión que hubiera atrapado el error que acaba de salir, para que no pueda regresar sin avisar.
Qué debería revisar de todas formas
Las pruebas generadas afirman sobre el comportamiento actual real de la función, así que si la función tiene un error, una prueba ingenua podría codificar ese error como "correcto". Trate el resultado como un borrador sólido: lea las aserciones, confirme que coinciden con el comportamiento pretendido y no solo con el actual, y ajuste antes de integrar.
Qué puede hacer con ella
Cubrir con pruebas un módulo sin tests
Un equipo hereda una función de cálculo de pagos sin pruebas y genera una suite completa que cubre redondeo, casos límite de moneda y montos en cero antes de refactorizarla.
Prueba de regresión tras corregir un error
Después de arreglar un error de interpretación de fechas, un desarrollador genera un caso de prueba específico para la entrada exacta que lo provocó, para que nunca vuelva a fallar sin que nadie lo note.
Andamiaje TDD para una función nueva
Un desarrollador esboza la firma de una función y genera primero las pruebas para aclarar el comportamiento esperado en entradas límite antes de escribir la implementación.
Red de seguridad antes de refactorizar
Antes de reestructurar una función de validación compleja, un equipo genera una suite amplia de pruebas para fijar el comportamiento actual y detectar cambios accidentales durante el refactor.
Preguntas frecuentes
¿Qué frameworks de pruebas soporta?
Soporta frameworks comunes como Jest, PyTest, PHPUnit y JUnit; indique el que usa su proyecto y el resultado sigue su sintaxis y convenciones.
¿Solo genera pruebas del camino feliz?
No, está afinado específicamente para incluir valores límite, entradas vacías o nulas, y condiciones de error que la propia lógica de la función sugiere, no solo el caso de éxito obvio.
¿Puede una prueba generada codificar un error existente como correcto?
Sí, ese es un riesgo real con cualquier prueba generada a partir del comportamiento actual, así que revise las aserciones contra el comportamiento pretendido antes de integrar, sobre todo si sospecha que la lógica ya tiene un error.
¿Hay una prueba gratuita?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Cuánto cuesta?
$0.003 por solicitud más $0.0135 por cada 1000 palabras de código fuente enviadas, y solo se cobran las tareas que se completan con éxito.
¿Qué pasa si la generación falla?
Se reintenta automáticamente hasta tres veces; una falla persistente devuelve un error claro y nunca se cobra.
¿Puedo generar una sola prueba de regresión para un error específico?
Sí, envíe la función ya corregida y describa la entrada que antes fallaba para obtener un caso de regresión puntual en vez de una suite completa.
¿Se conserva mi código después de la solicitud?
No. El código fuente enviado y las pruebas generadas se eliminan al vencer el período de retención y nunca se usan para entrenar modelos.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/dev/unit-tests \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"…"}'const res = await fetch("https://api.kit.forhosting.com/dev/unit-tests", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/unit-tests",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/unit-tests", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/unit-tests", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"text": "…"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.unit_tests",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |