Après avoir utilisé RSpec pour plusieurs projets, j'essaie minitest/unit. Jusqu'ici, j'aime bien, mais il me manque d'utiliser des blocs de description/contexte pour regrouper mes tests/spécifications de manière logique.
Je sais que minitest/spec fournit cette fonctionnalité, mais j'aime bien que minitest/unit se sente un peu plus près de barebones Ruby.
Existe-t-il des gemmes fournissant un support de description/contexte pour minitest/unit? Ou devrais-je simplement vivre avec mes longs fichiers de test non organisés en minitest/unit?
Je connais plusieurs personnes venant de RSpec pour minitest aux prises avec la même question. Ils adorent la capacité à imbriquer à l'aide de blocs decrire/context et veulent continuer dans les moindres détails. Il y a plusieurs solutions:
context
. Mais vous pouvez tout aussi bien utiliser describe
à sa place et tout fonctionne comme vous le souhaitiez.Voici un exemple de la façon dont mes fichiers de test sont organisés:
test/
models/
user/
authentication_test.rb
email_test.rb
reservation_test.rb
user_test.rb
username_test.rb
J'utilise cette structure, que j'utilise les styles DSL ou xUnit. Lorsque j'utilise la spécification DSL, je spécifie ce que je teste dans mon bloc de description de la manière suivante:
require "minitest_helper"
describe User, :authentications do
before do
# ...
Vous pouvez également jeter plusieurs classes dans un fichier de test:
module PizzaTest
class Isolation < ActiveSupport::TestCase
test "is awesome by default" do
assert Pizza.new.awesome?
end
end
class Integration < ActiveSupport::TestCase
fixtures :all
test "is awesome too" do
pizzas('one-with-everything').awesome?
end
end
end
et même des classes de test de nid:
class PizzaTest < ActiveSupport::TestCase
test "is awesome by default" do
assert Pizza.new.awesome?
end
class Integration < ActiveSupport::TestCase
fixtures :all
test "is awesome too" do
assert pizzas('one-with-everything').awesome?
end
end
end
Je préfère cette façon (seulement un peu) mais je pense que c'est plus facile à suivre:
class ConventionalNameTest < ActiveSupport::TestCase
class ContextTest < ConventionalNameTest
# so much stuff...
end
class AnotherContextTest < ConventionalNameTest
# and some more...
end
Pour compléter la réponse précédente, je préfère cette option légèrement moins détaillée:
class ConventionalNameTest < ActiveSupport::TestCase
class ContextTest < self
# so much stuff...
end
class AnotherContextTest < self
# and some more...
end
end