0Pricing
Lua Academy · Leçon

Blocs describe et it

Structurez une suite de tests.

Blocs describe et it est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.

Structure d’une spécification

busted organise les tests avec deux fonctions principales : describe et it. Un bloc describe regroupe les tests associés, et chaque bloc it constitue un cas de test unique.

Cette structure vient du développement piloté par le comportement et se lit comme du français courant.

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

Le bloc describe

describe reçoit une chaîne de caractères servant de nom et une fonction. Le nom doit identifier l’unité ou la fonctionnalité testée, par exemple un module ou une classe.

Tout ce qui se trouve dans la fonction appartient à ce groupe. Le nom apparaît dans la sortie des tests pour organiser les résultats.

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

Le bloc it

Chaque bloc it décrit un comportement précis. La chaîne doit compléter la phrase commencée par describe.

Lus ensemble, « calculator » et « ajoute deux nombres » forment une spécification claire de l’intention.

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

Imbriquer des blocs describe

Vous pouvez imbriquer des blocs describe pour exprimer un contexte. Un bloc interne peut décrire une méthode particulière ou une condition spéciale.

L’imbrication rassemble les cas associés et produit une sortie lisible et indentée.

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

Configuration avec before_each

before_each exécute une fonction avant chaque bloc it de son groupe. Utilisez-le pour créer des données de test neuves afin que les tests ne partagent pas leur état.

Ainsi, chaque test reste isolé. Une modification dans un test ne peut pas se propager au suivant.

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)

Nettoyage avec after_each

after_each s’exécute après chaque test. Utilisez-le pour libérer des ressources telles que des fichiers temporaires, des connexions ouvertes ou l’état global.

Associer la configuration et le nettoyage garantit que l’environnement est réinitialisé entre les tests.

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

Configuration et nettoyage

busted propose également setup et teardown, qui s’exécutent une fois par bloc describe plutôt qu’une fois par test.

Utilisez-les pour les opérations coûteuses effectuées une seule fois, comme l’ouverture d’une connexion partagée, lorsque les répéter pour chaque test serait inutile.

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

Tests en attente

Vous pouvez parfois vouloir signaler un test que vous n’avez pas encore écrit. Appelez pending avec une description ou écrivez un bloc it sans fonction.

busted les signale comme étant en attente plutôt que comme réussis ou échoués, pour vous rappeler de les terminer.

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

Cibler et exclure

Pendant le débogage, vous pouvez vous concentrer sur un sous-ensemble de tests. L’ajout de --tags sur la ligne de commande ou l’utilisation des utilitaires de busted vous permet d’exécuter uniquement les tests importants.

Vous évitez ainsi d’exécuter toute la suite pendant que vous travaillez sur une zone en échec.

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

Conventions de nommage

De bons noms rendent les échecs explicites. Commencez describe par le sujet et it par un verbe décrivant le comportement.

Évitez les noms vagues comme « fonctionne » ou « test1 ». Un test en échec doit se lire comme un rapport de bogue sur lequel vous pouvez agir.

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

Assembler le tout

Une spécification complète combine des groupes describe, une configuration avec before_each et des cas it ciblés. Cette structure de base peut passer d’un seul test à des centaines.

Gardez les blocs courts et concentrez chaque it sur un seul comportement pour obtenir la sortie la plus claire possible.

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)

Vérification rapide

Vérifiez votre compréhension de la structure des blocs busted.

Récapitulatif

describe regroupe les tests associés et it définit un cas unique, le tout se lisant comme une spécification. Imbriquez les blocs describe pour exprimer le contexte.

Utilisez before_each et after_each pour isoler chaque test, et setup et teardown pour les opérations effectuées une fois par bloc. Marquez le travail inachevé avec pending.

Questions Fréquemment Posées

La leçon « Blocs describe et it » est-elle gratuite ?

Oui — le texte complet de « Blocs describe et it » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Blocs describe et it » ?

Structurez une suite de tests. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Lua Academy ?

Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Blocs describe et it » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?

Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Pourquoi tester
  2. Blocs describe et it
  3. Assertions
  4. Simulations et espions
← Retour à Lua Academy