Désactiver un groupe de tests dans rspec?

J’ai une spécification de test qui describes une classe et au sein de laquelle différents contexts chacun des blocs différents.

Est-il possible de désactiver un context temporairement?

J’ai essayé d’append un appel en pending "temporarily disabled" tout en haut dans un context je veux désactiver, et j’ai vu quelque chose en attente lorsque j’ai exécuté la spécification, mais il a simplement continué à exécuter le rest des tests.

C’est 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 discussion dans lequel le créateur (?) De rspec dit que c’est possible dans rspec 2, que je lance. Je suppose que cela a fonctionné, mais cela n’a pas eu l’effet désiré de désactiver tous les tests suivants, ce à quoi je pense quand je vois un appel en pending .

Y a-t-il une alternative ou est-ce que je le fais mal?

    Pour désactiver une arborescence de spécifications à l’aide de RSpec 3, vous pouvez:

     before { skip } # or xdescribe # or xcontext 

    Vous pouvez append un message avec skip qui apparaîtra dans la sortie:

     before { skip("Awaiting a fix in the gem") } 

    avec RSpec 2 :

     before { pending } 

    Utilisez des filtres d’exclusion . De 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 

    Quand je lance “rspec ./spec/sample_spec.rb –format doc”

    Ensuite, la sortie doit contenir “groupe 2 exemple 1”

    Et la sortie ne doit pas contenir “exemple 1 du groupe 1”

    Et la sortie ne doit pas contenir “exemple de groupe 1 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 des raisons avec mes éléments en attente lorsque je suis en train de désactiver quelque chose pendant un certain temps. Ils servent de petits commentaires / TODO qui sont présentés régulièrement plutôt que d’être enterrés dans un commentaire ou un exemple / fichier exclu.

    Changer en pending ou xit est rapide et facile, mais je préfère la construction de hachage. Cela vous donne une documentation complète, est une liste déroulante (ne change pas la description / le contexte / je dois décider quoi utiliser plus tard), et est tout aussi facile à supprimer 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.

    Mettre à 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 tout le bloc 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 juste évalué (et donc exécuté) lorsque le fichier est chargé au démarrage. Cependant, vous devez l’exécuter lors de l’exécution des tests. C’est pourquoi les réponses ont suggéré de mettre en pending (RSpec 2) ou de skip (RSpec 3) dans un bloc before .