J'ai une spécification de test qui describes
une classe et qui contient divers contexts
chacun avec différents blocs it
.
Existe-t-il un moyen de désactiver temporairement un context
?
J'ai essayé d'ajouter un pending "temporarily disabled"
appeler tout en haut dans un context
Je veux désactiver, et j'ai vu quelque chose à propos de l'attente lorsque j'ai exécuté la spécification, mais il a continué à exécuter le reste des tests.
Voici ce que j'avais en quelque sorte:
describe Something
context "some tests" do
it "should blah" do
true
end
end
context "some other tests" do
pending "temporarily disabled"
it "should do something destructive" do
blah
end
end
end
mais comme je l'ai dit, il a continué à exécuter les tests sous l'appel en attente.
La recherche m'a conduit à ce fil de la liste de diffusion dans lequel le créateur (?) De rspec dit que c'est possible dans rspec 2, que j'exécute. Je suppose que cela a fonctionné, mais cela n'a pas eu l'effet souhaité de désactiver tous les tests suivants, ce à quoi je pense lorsque je vois un appel à pending
.
Y a-t-il une alternative ou je me trompe?
Pour désactiver une arborescence de spécifications à l'aide de RSpec, vous pouvez:
before { skip }
# or
xdescribe
# or
xcontext
Vous pouvez ajouter un message avec skip qui apparaîtra dans la sortie:
before { skip("Awaiting a fix in the gem") }
avec RSpec 2:
before { pending }
Utilisez filtres d'exclusion . Depuis cette page: dans votre spec_helper.rb
(ou Rails_helper.rb
)
RSpec.configure do |c|
c.filter_run_excluding :broken => true
end
Dans votre test:
describe "group 1", :broken => true do
it "group 1 example 1" do
end
it "group 1 example 2" do
end
end
describe "group 2" do
it "group 2 example 1" do
end
end
Lorsque j'exécute "rspec ./spec/sample_spec.rb --format doc"
Ensuite, la sortie doit contenir "groupe 2 exemple 1"
Et la sortie ne doit pas contenir "groupe 1 exemple 1"
Et la sortie ne doit pas contenir "groupe 1 exemple 2"
Voyez ce que vous en pensez:
describe "something sweet", pending: "Refactor the wazjub for easier frobbing" do
it "does something well"
it "rejects invalid input"
end
J'aime voir les raisons de mes éléments en attente lorsque je désactive quelque chose pendant "un certain temps". Ils servent de petits commentaires/TODO qui sont présentés régulièrement plutôt qu'enterrés dans un commentaire ou un exemple/fichier exclu.
Changer it
en pending
ou xit
est rapide et facile, mais je préfère la construction de hachage. Il vous donne une documentation à chaque exécution, est un drop-in (ne change pas de description/contexte/it donc je dois décider quoi utiliser à nouveau plus tard), et est tout aussi facilement supprimé si la décision est prise ou si le bloqueur est supprimé .
Cela fonctionne de la même manière pour les groupes et les exemples individuels.
un autre. https://Gist.github.com/1300152
utilisez xdescribe, xcontext, xit pour le désactiver.
Mise à jour:
Depuis rspec 2.11, il inclut xit par défaut. donc le nouveau code sera
# put into spec_helper.rb
module RSpec
module Core
module DSL
def xdescribe(*args, &blk)
describe *args do
pending
end
end
alias xcontext xdescribe
end
end
end
Usage
# a_spec.rb
xdescribe "padding" do
it "returns true" do
1.should == 1
end
end
Utilisez en attente au lieu de décrire. Si votre bloc est:
context "some other tests" do
it "should do something destructive" do
blah
end
end
Vous pouvez ignorer le bloc entier en:
pending "some other tests" do
it "should do something destructive" do
blah
end
end
describe "GET /blah" do
before(:each) { pending "Feature to be implemented..." }
it { expect(page).to have_button("Submit") }
it { expect(page).to have_content("Blah") }
end
Juste pour expliquer ce qui se passe avec votre code. En l'incluant là où vous en avez, il est simplement évalué (et donc exécuté) lorsque le fichier est chargé au démarrage. Cependant, vous en avez besoin pour être exécuté lors de l'exécution des tests. C'est pourquoi les réponses ont suggéré de mettre pending
(RSpec 2) ou skip
(RSpec 3) dans un bloc before
.