Lua Academy · leksjon

describe- og it-blokker

Strukturer en testsuite.

Leksjon 2 av 413 trinn

describe- og it-blokker er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.

Oppbygningen av en spec

busted organiserer tester med to kjernefunksjoner: describe og it. En describe-blokk grupperer relaterte tester, og hver it-blokk er ett enkelt testtilfelle.

Denne strukturen kommer fra atferdsdrevet utvikling og leses som vanlig engelsk.

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

describe-blokken

describe tar imot en navnestreng og en funksjon. Navnet bør identifisere enheten eller funksjonen som testes, for eksempel en modul eller klasse.

Alt inne i funksjonen tilhører denne gruppen. Navnet vises i testresultatet for å organisere resultatene.

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

it-blokken

Hver it-blokk beskriver én bestemt oppførsel. Strengen bør fullføre setningen som begynner med describe.

Sett sammen "kalkulator" og "legger sammen to tall", så får du en tydelig spesifikasjon av hensikten.

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

Nøste describe-blokker

Du kan nøste describe-blokker for å uttrykke kontekst. En indre blokk kan beskrive en bestemt metode eller en spesiell betingelse.

Nøsting holder relaterte tilfeller samlet og gir et lesbart resultat med innrykk.

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

Oppsett med before_each

before_each kjører en funksjon før hver it i blokken. Bruk den til å bygge ferske testdata, slik at testene ikke deler tilstand.

Dette holder hver test isolert. En endring i én test kan ikke lekke inn i den neste.

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)

Opprydding med after_each

after_each kjører etter hver test. Bruk den til å rydde opp ressurser som midlertidige filer, åpne forbindelser eller global tilstand.

Ved å kombinere oppsett og opprydding blir miljøet tilbakestilt mellom testene.

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

setup og teardown

busted tilbyr også setup og teardown, som kjører én gang per describe-blokk i stedet for én gang per test.

Bruk disse til kostbart arbeid som bare skal gjøres én gang, for eksempel å åpne en delt forbindelse, når oppsett per test ville vært unødvendig.

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

Ventende tester

Noen ganger vil du notere en test du ennå ikke har skrevet. Kall pending med en beskrivelse, eller skriv en it-blokk uten funksjon.

busted rapporterer disse som ventende i stedet for som beståtte eller feilende, slik at du blir minnet på å fullføre dem.

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

Fokusere på og utelate tester

Mens du feilsøker, kan du fokusere på et utvalg tester. Ved å bruke --tags på kommandolinjen eller hjelpefunksjoner i busted kan du bare kjøre det som er relevant.

Da slipper du å kjøre hele testpakken mens du arbeider med ett område som feiler.

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

Navnekonvensjoner

Gode navn gjør feil selvforklarende. Start describe med emnet, og start it med et verb som beskriver oppførselen.

Unngå vage navn som "works" eller "test1". En test som feiler, bør leses som en feilrapport du kan handle på.

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

Sette alt sammen

En komplett spec kombinerer describe-grupper, before_each-oppsett og fokuserte it-tilfeller. Dette skjelettet kan skaleres fra én test til hundrevis.

Hold blokkene små, og la hver it fokusere på én enkelt oppførsel for å få et så tydelig resultat som mulig.

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)

Kort sjekk

Test hvor godt du forstår strukturen til busted-blokker.

Oppsummering

describe grupperer relaterte tester, og it definerer ett enkelt tilfelle, slik at strukturen leses som en spesifikasjon. Nøst describe-blokker for å uttrykke kontekst.

Bruk before_each og after_each for isolasjon per test, og setup og teardown for arbeid som utføres én gang per blokk. Marker uferdig arbeid med pending.

Gratis å komme i gang

Lær deg Lua med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
40
Leksjoner
159

Ofte stilte spørsmål

Er leksjonen «describe- og it-blokker» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «describe- og it-blokker», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lua Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «describe- og it-blokker»?

Strukturer en testsuite. Du øver på Lua Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Lua Academy?

Ingen tidligere erfaring er nødvendig. Lua Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «describe- og it-blokker»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Lua Academy-leksjonen?

Ja. Alle Lua Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Hvorfor teste
  2. describe- og it-blokker
  3. Påstander
  4. Mocks og spies
← Tilbake til Lua Academy