112 votes

Désactiver un groupe de tests dans rspec ?

J'ai une spécification de test qui describes une classe et au sein de celle-ci, il y a plusieurs contexts chacun avec divers it blocs.

Y a-t-il un moyen de désactiver un context temporairement ?

J'ai essayé d'ajouter un pending "temporarily disabled" tout en haut, dans un context Je veux désactiver, et j'ai vu quelque chose à propos de l'attente lorsque j'ai lancé la spécification, mais ensuite il a juste continué à exécuter le reste 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 juste continué à exécuter les tests sous l'appel en attente.

La recherche m'a mené à ceci fil de la liste de diffusion dans lequel le créateur ( ?) de rspec dit que c'est possible dans rspec 2, que j'utilise. Je suppose que ça a marché, mais ça n'a pas eu l'effet escompté de désactiver tous les tests suivants, ce à quoi je pense quand je vois un test de type pending appeler.

Existe-t-il une alternative ou est-ce que je m'y prends mal ?

188voto

Pyro Points 376

Pour désactiver un arbre de spécifications en utilisant RSpec 3 vous pouvez :

before { skip }
# or 
xdescribe
# or 
xcontext

Vous pouvez ajouter un message avec sauter qui apparaîtra dans la sortie :

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

con RSpec 2 :

before { pending }

1 votes

Comment faites-vous exactement ça sur un bloc qui a.. : describe 'XXXXX' do .... end

2 votes

@p.matsinopoulos Il suffit de l'ajouter à la ligne suivante describe 'XXXXX' do . Ça a marché comme sur des roulettes, merci @Pyro !

0 votes

Solution plus simple que les filtres, +1

47voto

Robert Speicher Points 8292

Utilice les filtres d'exclusion . De cette page : Dans votre spec_helper.rb (o 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 j'exécute "rspec ./spec/sample_spec.rb --format doc"

Alors la sortie devrait 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".

22voto

botimer Points 121

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 désactive quelque chose pour "un moment". Ils servent de petits commentaires/ODO qui sont présentés régulièrement plutôt que d'être enfouis dans un commentaire ou un exemple/fichier exclu.

Changer it a pending o xit est rapide et facile, mais je préfère la construction en hachis. Elle vous permet d'avoir une documentation à chaque exécution, est un "drop-in" (ne change pas describe/context/it pour que je doive décider quoi utiliser à nouveau plus tard), et est tout aussi facile à retirer si la décision est prise ou si le bloqueur est retiré.

Cela fonctionne de la même manière pour les groupes et les exemples individuels.

0 votes

Je ne suis pas sûr que cela fonctionne de la même manière pour describe, mais dans thest pending, le test est exécuté et échoue si le test commence à passer. Le xdescribe (comme le xit, je suppose) - ne l'exécute pas.

2 votes

A confirmé que cela fonctionne, avec les deux pending: y skip: dans rspec 3.6.0. Il me semble que c'est la meilleure solution. Dans rspec3, les tests sont toujours en attente, mais skip ne l'est pas (quelle que soit la façon dont vous appliquez la skip ).

9voto

Guten Points 871

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. Le nouveau code sera donc le suivant

# 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

Utilisation

# a_spec.rb
xdescribe "padding" do
  it "returns true" do
    1.should == 1
   end
end

4voto

Amir Samakar Points 77

Utilisez "pending" au lieu de "describe". Si votre bloc est :

context "some other tests" do
  it "should do something destructive" do
    blah
  end
end

Vous pouvez sauter le bloc entier en :

pending "some other tests" do
  it "should do something destructive" do
    blah
  end
end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X