Retour à la leçon
Mission

Mission : la suite de tests qui échoue seulement dans un certain ordre

Diagnostiquer une suite de tests busted dont les résultats dépendent de l'ordre d'exécution, puis choisir entre spy et stub pour isoler une dépendance externe.

Contexte

Un développeur écrit ces tests pour le module Inventory avec busted :

lua
local Inventory = require("inventory")
local inv = Inventory.new(3)   -- créé UNE SEULE FOIS, en dehors de before_each

describe("Inventory", function()
  it("ajoute un item quand il y a de la place", function()
    local ok = inv:add("epee")
    assert.is_true(ok)
    assert.equals(1, inv.count)
  end)

  it("lève une erreur quand l'inventaire est plein", function()
    inv:add("a"); inv:add("b")   -- ajoute seulement 2, en comptant sur le 1 déjà présent du test précédent
    assert.has_error(function()
      inv:add("d")
    end, "Inventaire plein")
  end)
end)

Ces deux tests passent quand ils sont exécutés dans cet ordre précis. Mais dès que l'équipe réorganise les fichiers de test ou en ajoute un nouveau avant celui-ci, le deuxième test échoue de façon imprévisible, sans qu'aucune ligne du module Inventory n'ait changé.