0Pricing
Lua Academy · Lección

Bloques describe e it

Estructure una suite de pruebas

Bloques describe e it es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 2 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.

Estructura de una especificación

busted organiza las pruebas con dos funciones principales: describe e it. Un bloque describe agrupa pruebas relacionadas y cada bloque it es un caso de prueba individual.

Esta estructura procede del desarrollo guiado por el comportamiento y se lee como lenguaje natural.

describe("Stack", function()
  it("starts empty", function()
    assert.are.equal(0, Stack.new():size())
  end)
end)

El bloque describe

describe recibe una cadena con un nombre y una función. El nombre debe identificar la unidad o funcionalidad que se está probando, como un módulo o una clase.

Todo lo que se encuentre dentro de la función pertenece a ese grupo. El nombre aparece en la salida de las pruebas para organizar los resultados.

describe("calculator", function()
  -- tests live here
end)

El bloque it

Cada bloque it describe un comportamiento específico. La cadena debe completar la oración iniciada por describe.

Leídos juntos, "calculator" y "suma dos números" forman una especificación clara de la intención.

describe("calculator", function()
  it("adds two numbers", function()
    assert.are.equal(5, calc.add(2, 3))
  end)
end)

Anidamiento de bloques describe

Puede anidar bloques describe para expresar el contexto. Un bloque interno podría describir un método específico o una condición especial.

El anidamiento mantiene agrupados los casos relacionados y produce una salida legible con sangría.

describe("List", function()
  describe("push", function()
    it("adds an item", function()
      assert.are.equal(1, list:push("a"):size())
    end)
  end)
end)

Configuración con before_each

before_each ejecuta una función antes de cada bloque it de su bloque. Utilícelo para crear datos de prueba nuevos, de modo que las pruebas no compartan estado.

Así cada prueba permanece aislada. Un cambio en una prueba no puede filtrarse a la siguiente.

describe("Stack", function()
  local s
  before_each(function()
    s = Stack.new()
  end)
  it("pushes", function()
    s:push(1)
    assert.are.equal(1, s:size())
  end)
end)

Limpieza con after_each

after_each se ejecuta después de cada prueba. Utilícelo para liberar recursos como archivos temporales, conexiones abiertas o estado global.

Emparejar la configuración con la limpieza garantiza que el entorno se restablezca entre pruebas.

after_each(function()
  os.remove("temp.db")
end)

setup y teardown

busted también ofrece setup y teardown, que se ejecutan una vez por bloque describe en lugar de una vez por prueba.

Utilícelos para tareas costosas que solo deben realizarse una vez, como abrir una conexión compartida, cuando configurar cada prueba resultaría innecesario.

describe("db", function()
  setup(function()
    db = connect()
  end)
  teardown(function()
    db:close()
  end)
end)

Pruebas pendientes

A veces querrá dejar constancia de una prueba que aún no ha escrito. Llame a pending con una descripción o escriba un bloque it sin función.

busted informa de ellas como pendientes, en lugar de marcarlas como correctas o fallidas, para recordarle que debe terminarlas.

it("handles unicode", function()
  pending("not implemented yet")
end)

Enfoque y exclusión de pruebas

Mientras depura, puede centrarse en un subconjunto de pruebas. Etiquetarlas con --tags en la línea de comandos o utilizar los helpers de busted le permite ejecutar solo lo relevante.

Así evita ejecutar toda la suite mientras trabaja en un área concreta que falla.

-- run only tests tagged 'fast'
-- busted --tags=fast

Convenciones de nomenclatura

Los buenos nombres hacen que los fallos se expliquen por sí mismos. Comience describe con el sujeto y it con un verbo que describa el comportamiento.

Evite nombres imprecisos como "funciona" o "test1". Una prueba fallida debe leerse como un informe de error sobre el que pueda actuar.

describe("parser", function()
  it("rejects malformed input", function()
    assert.has_error(function() parser.parse("{") end)
  end)
end)

Cómo encaja todo

Una especificación completa combina grupos describe, la configuración de before_each y casos it centrados. Esta estructura básica puede ampliarse desde una prueba hasta cientos.

Mantenga los bloques pequeños y centre cada it en un solo comportamiento para obtener la salida más clara posible.

describe("Account", function()
  local acc
  before_each(function() acc = Account.new(100) end)
  it("withdraws funds", function()
    acc:withdraw(40)
    assert.are.equal(60, acc.balance)
  end)
end)

Comprobación rápida

Compruebe si entiende la estructura de bloques de busted.

Resumen

describe agrupa pruebas relacionadas e it define un caso individual, de modo que la estructura se lee como una especificación. Anide bloques describe para expresar el contexto.

Utilice before_each y after_each para aislar cada prueba, y setup y teardown para las tareas que se ejecutan una vez por bloque. Marque el trabajo sin terminar con pending.

Preguntas frecuentes

¿La lección «Bloques describe e it» es gratis?

Sí — el texto completo de «Bloques describe e it» 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 «Bloques describe e it»?

Estructure una suite de pruebas 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 2 de 4.

¿Cuánto tiempo toma la lección «Bloques describe e it»?

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.

Todas las lecciones de este curso

  1. Por qué hacer pruebas
  2. Bloques describe e it
  3. Aserciones
  4. Mocks y spies
← Volver a Lua Academy