0Pricing
Lua Academy · Lezione

Blocchi describe e it

Strutturi una suite di test.

Blocchi describe e it è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.

Struttura di uno spec

busted organizza i test con due funzioni fondamentali: describe e it. Un blocco describe raggruppa test correlati, mentre ogni blocco it è un singolo caso di test.

Questa struttura deriva dallo sviluppo guidato dal comportamento e si legge come un testo in linguaggio naturale.

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

Il blocco describe

describe accetta una stringa come nome e una funzione. Il nome dovrebbe identificare l'unità o la funzionalità sottoposta a test, ad esempio un modulo o una classe.

Tutto ciò che si trova all'interno della funzione appartiene a quel gruppo. Il nome compare nell'output dei test per organizzare i risultati.

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

Il blocco it

Ogni blocco it descrive un comportamento specifico. La stringa dovrebbe completare la frase iniziata da describe.

Letti insieme, "calculator" più "somma due numeri" formano una specifica chiara dell'intento.

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

Annidare i blocchi describe

Può annidare i blocchi describe per esprimere il contesto. Un blocco interno può descrivere un metodo specifico o una condizione particolare.

L'annidamento mantiene raggruppati i casi correlati e produce un output leggibile e indentato.

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

Configurazione con before_each

before_each esegue una funzione prima di ogni it nel suo blocco. Lo utilizzi per creare dati di test nuovi, in modo che i test non condividano lo stato.

In questo modo ogni test rimane isolato. Una modifica in un test non può propagarsi a quello successivo.

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)

Pulizia con after_each

after_each viene eseguito dopo ogni test. Lo utilizzi per ripulire risorse come file temporanei, connessioni aperte o stato globale.

Abbinare configurazione e pulizia assicura che l'ambiente venga reimpostato tra un test e l'altro.

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

setup e teardown

busted offre anche setup e teardown, che vengono eseguiti una volta per blocco describe anziché una volta per test.

Li utilizzi per operazioni costose da eseguire una sola volta, come aprire una connessione condivisa, quando predisporre l'ambiente per ogni test sarebbe uno spreco.

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

Test in sospeso

A volte può voler annotare un test che non ha ancora scritto. Chiami pending con una descrizione oppure scriva un blocco it senza funzione.

busted li segnala come in sospeso invece che superati o falliti, ricordandole di completarli.

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

Selezionare ed escludere test

Durante il debug può concentrarsi su un sottoinsieme di test. L'uso di --tags nella riga di comando o degli helper di busted consente di eseguire solo ciò che è rilevante.

In questo modo evita di eseguire l'intera suite mentre lavora su un'area problematica.

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

Convenzioni per i nomi

Un buon nome rende i fallimenti autoesplicativi. Inizi describe con il soggetto e it con un verbo che descriva il comportamento.

Eviti nomi vaghi come "works" o "test1". Un test fallito dovrebbe leggersi come una segnalazione di bug su cui può intervenire.

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

Mettere tutto insieme

Uno spec completo combina gruppi describe, configurazione con before_each e casi it mirati. Questo scheletro può crescere da un test a centinaia.

Mantenga piccoli i blocchi e concentri ogni it su un singolo comportamento per ottenere l'output più chiaro possibile.

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 rapida

Verifichi la sua comprensione della struttura dei blocchi di busted.

Riepilogo

describe raggruppa i test correlati e it definisce un singolo caso, con una struttura simile a una specifica. Annidi i blocchi describe per esprimere il contesto.

Utilizzi before_each e after_each per l'isolamento tra i test, e setup e teardown per le operazioni eseguite una volta per blocco. Contrassegni il lavoro non completato con pending.

Domande Frequenti

La lezione «Blocchi describe e it» è gratuita?

Sì — il testo completo di «Blocchi describe e it» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.

Cosa imparerò in «Blocchi describe e it»?

Strutturi una suite di test. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Lua Academy?

Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Blocchi describe e it»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Lua Academy?

Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Perché eseguire test
  2. Blocchi describe e it
  3. Asserzioni
  4. Mock e spy
← Torna a Lua Academy