0Pricing
Lua Academy · Aula

Blocos describe e it

Estruture uma suíte de testes.

Blocos describe e it é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.

Estrutura de uma especificação

O busted organiza os testes com duas funções centrais: describe e it. Um bloco describe agrupa testes relacionados, e cada bloco it é um único caso de teste.

Essa estrutura vem do desenvolvimento orientado a comportamento e parece uma descrição em linguagem comum.

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

O bloco describe

describe recebe uma cadeia de caracteres com um nome e uma função. O nome deve identificar a unidade ou a funcionalidade que está sendo testada, como um módulo ou uma classe.

Tudo dentro da função pertence a esse grupo. O nome aparece na saída dos testes para organizar os resultados.

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

O bloco it

Cada bloco it descreve um comportamento específico. A cadeia de caracteres deve completar a frase iniciada por describe.

Lidos em conjunto, "calculadora" mais "soma dois números" formam uma especificação clara da intenção.

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

Aninhando blocos describe

Você pode aninhar blocos describe para expressar o contexto. Um bloco interno pode descrever um método específico ou uma condição especial.

O aninhamento mantém os casos relacionados juntos e produz uma saída legível e recuada.

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

Configuração com before_each

before_each executa uma função antes de cada it em seu bloco. Use-o para criar dados de teste novos, para que os testes não compartilhem estado.

Isso mantém cada teste isolado. Uma alteração em um teste não pode vazar para o seguinte.

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)

Desmontagem com after_each

after_each é executado depois de cada teste. Use-o para limpar recursos como arquivos temporários, conexões abertas ou estado global.

Combinar configuração e desmontagem garante que o ambiente seja redefinido entre os testes.

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

configuração e desmontagem

O busted também oferece setup e teardown, que são executados uma vez por bloco describe, e não uma vez por teste.

Use-os para tarefas únicas dispendiosas, como abrir uma conexão compartilhada, quando configurar cada teste seria um desperdício.

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

Testes pendentes

Às vezes, você quer registrar um teste que ainda não escreveu. Chame pending com uma descrição ou escreva um bloco it sem função.

O busted informa esses testes como pendentes, em vez de aprovados ou reprovados, lembrando você de concluí-los.

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

Concentrando e excluindo

Durante a depuração, você pode se concentrar em um subconjunto de testes. Marcar testes com --tags na linha de comando ou usar os auxiliares do busted permite executar apenas o que importa.

Assim, você evita executar todo o conjunto enquanto trabalha em uma área com falhas.

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

Convenções de nomenclatura

Bons nomes tornam as falhas autoexplicativas. Comece describe com o assunto e it com um verbo que descreva o comportamento.

Evite nomes vagos como "funciona" ou "teste1". Um teste com falha deve parecer um relatório de erro sobre o qual você possa agir.

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

Juntando tudo

Uma especificação completa combina grupos describe, configuração com before_each e casos it bem definidos. Esse esqueleto pode crescer de um teste para centenas.

Mantenha os blocos pequenos e cada it concentrado em um único comportamento para obter a saída mais clara possível.

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)

Verificação rápida

Teste sua compreensão da estrutura de blocos do busted.

Recapitulação

describe agrupa testes relacionados, e it define um único caso, formando uma especificação. Aninhe blocos describe para expressar o contexto.

Use before_each e after_each para o isolamento por teste, e setup e teardown para tarefas executadas uma vez por bloco. Marque o trabalho inacabado com pending.

Perguntas Frequentes

A aula “Blocos describe e it” é grátis?

Sim — o texto completo de “Blocos describe e it” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.

O que vou aprender em “Blocos describe e it”?

Estruture uma suíte de testes. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Lua Academy?

Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Blocos describe e it”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Lua Academy?

Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Por que testar
  2. Blocos describe e it
  3. Asserções
  4. Mocks e spies
← Voltar para Lua Academy