web-dev-qa-db-fra.com

Désactiver un groupe de tests dans rspec?

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?

96

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 }
151
Pyro

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"

43
Robert Speicher

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.

19
botimer

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 
9
GutenYe

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
3
Amir Samakar
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
1
Matt

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.

0
PhilT