Aserciones
Exprese el comportamiento esperado
Aserciones es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
Qué hacen las aserciones
Una aserción es el núcleo de una prueba. Expresa un hecho que debe ser verdadero. Si lo es, la prueba continúa. Si no, busted registra un fallo con un mensaje útil.
busted utiliza la biblioteca luassert, a la que se accede mediante la tabla global assert.
assert.are.equal(4, 2 + 2)are.equal
assert.are.equal comprueba la igualdad mediante el operador ==. El primer argumento es el valor esperado y el segundo es el valor real.
Funciona con números, cadenas y booleanos, pero con las tablas compara la identidad, no el contenido.
assert.are.equal("hello", greet())
assert.are.equal(10, count)are.same para tablas
Para comparar profundamente el contenido de dos tablas, use assert.are.same. Comprueba de forma recursiva que las dos tablas contengan los mismos valores.
Use same para estructuras de datos y equal para primitivas o comprobaciones de identidad.
assert.are.same({1, 2, 3}, split("1,2,3"))
assert.are.same({x = 1}, point)Valores de verdad
assert.is_true y assert.is_false comprueban que los valores sean exactamente booleanos. assert.is_truthy acepta cualquier valor que no sea nil ni false.
Elija la variante estricta cuando espere específicamente un resultado booleano.
assert.is_true(user.active)
assert.is_truthy(find("x"))
assert.is_false(list:isEmpty())Comprobaciones de nil
assert.is_nil verifica que un valor sea nil, y assert.is_not_nil verifica que esté presente. Estas comprobaciones son habituales al consultar valores.
Dejan más clara la intención que comparar con nil mediante equal.
assert.is_nil(map["missing"])
assert.is_not_nil(map["found"])Negación con is_not
La mayoría de las aserciones se pueden negar insertando is_not o usando la forma are_not. Esto expresa que algo debe ser diferente.
Por ejemplo, assert.are_not.equal pasa cuando los dos valores son diferentes.
assert.are_not.equal(1, 2)
assert.is_not_nil(result)Comprobación de errores
Para comprobar que el código genera un error, inclúyalo en una función y pásela a assert.has_error. busted llama a la función y confirma que haya generado un error.
También puede comprobar el mensaje de error pasando una cadena esperada como segundo argumento.
assert.has_error(function()
withdraw(-5)
end, "amount must be positive")has_no.errors
La comprobación opuesta es assert.has_no.errors. Pasa cuando la función incluida se ejecuta sin generar errores.
Resulta útil para confirmar que una llamada del flujo correcto no falla, incluso cuando no comprueba su valor de retorno.
assert.has_no.errors(function()
parse("valid input")
end)Mensajes de error personalizados
Puede añadir un mensaje a la mayoría de las aserciones para aclarar los errores. Páselo como argumento adicional para que el informe explique lo que se esperaba.
Los mensajes claros convierten un error críptico en uno que indica cómo actuar.
assert.is_true(ok, "login should succeed")Coincidencias con modificadores
luassert proporciona modificadores y matchers para realizar comprobaciones más completas. Por ejemplo, assert.matches comprueba una cadena con respecto a un patrón de Lua.
Esto resulta práctico cuando una comprobación de igualdad exacta es demasiado estricta para una salida variable.
assert.matches("%d%d%d%d", get_year())
assert.matches("error", log_line, 1, true)Elegir la aserción adecuada
Elija la aserción más específica para que la intención quede clara. Use same para tablas, equal para primitivas, has_error para errores y comprobaciones de valores de verdad para booleanos.
Las aserciones específicas producen mejores mensajes de error, lo que agiliza la depuración.
describe("queue", function()
it("dequeues in order", function()
assert.are.same({"a", "b"}, q:drain())
end)
end)Comprobación rápida
Compruebe cuánto entiende de las aserciones de busted.
Repaso
luassert proporciona la tabla assert de busted. Use are.equal para primitivas, are.same para comparar tablas en profundidad y comprobaciones de valores de verdad o de nil cuando corresponda.
Compruebe los errores con has_error y los casos correctos con has_no.errors. Niegue las aserciones con is_not y añada mensajes para obtener informes más claros.
Aprende Lua con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 40
- Lecciones
- 159
Preguntas frecuentes
¿La lección «Aserciones» es gratis?
Sí — el texto completo de «Aserciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Aserciones»?
Exprese el comportamiento esperado Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Aserciones»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.