2010-06-12 5 views
15

J'ai la tâche RSpec (1.3.0) suivant défini dans mon Rakefile:Pourquoi mes spécifications RSpec s'exécutent-elles deux fois?

require 'spec/rake/spectask' 
Spec::Rake::SpecTask.new(:spec) do |spec| 
    spec.libs << 'lib' << 'spec' 
    spec.spec_files = FileList['spec/**/*_spec.rb'] 
end 

Je suit dans spec/spec_helper.rb:

require 'rubygems' 
require 'spec' 
require 'spec/autorun' 
require 'rack/test' 
require 'webmock/rspec' 

include Rack::Test::Methods 
include WebMock 

require 'omniauth/core' 

J'ai une seule spécification déclaré dans spec/foo/foo_spec.rb:

require File.dirname(__FILE__) + '/../spec_helper' 

describe Foo do 
    describe '#bar' do 
    it 'be bar-like' do 
     Foo.new.bar.should == 'bar' 
    end 
    end 
end 

Lorsque j'exécute rake spec, l'exemple unique s'exécute deux fois. Je peux le vérifier en faisant échouer l'exemple, en me donnant deux "F" rouges. Une chose que je pensais était que l'ajout de spec au SpecTasklibs les a fait être à double définition, mais en supprimant cela ne semble pas avoir d'effet.

Répondre

2

Je ne sais pas si cela résout le problème, mais vous pouvez utiliser require 'spec_helper' au lieu de require File.dirname(__FILE__) + '/../spec_helper'

En outre, 'spec/autorun' sera require 'spec' pour vous.

La seule autre chose que je peux penser est que vous avez deux tâches de spécifications définies dans votre système. Est-ce une application rails? Si c'est le cas, assurez-vous de ne pas dupliquer une tâche rake déjà existante dans lib/rake/tasks.

HTH, David

+0

Ce n'est pas une application Rails, ce n'est donc pas un problème. Je ne peux faire 'require 'spec_helper'' que si mon $ LOAD_PATH est déjà configuré, mais si je veux exécuter une seule spécification, $ LOAD_PATH ne sera pas défini avant' spec_helper.rb'. –

3

Ce n'est pas directement lié à la question de ce qui semble avoir concerne les versions Rspec de 2 partir, mais comme le titre de la question est la même qui m'a amené ici, je mentionne à d'autres qui Vous pouvez trouver cette page pour la même raison, car avoir rspec.rake dans votre lib/tasks peut entraîner le rake spec à exécuter tous les tests de spécification deux fois. La suppression de ce fichier m'a aidé (comme cela a été suggéré à: http://www.patrickgannon.net/post/519eed022c17433fc8000018/rake-runs-rspec-tests-twice)

19

J'ai eu ce problème à l'aide zeus, et le retrait require 'rails/autorun' de mon spec_helper.rb arrêté pour moi

+0

Je n'ai pas cette ligne et j'ai toujours ce problème. Une autre idée? –

+1

Le meilleur conseil que je peux vous donner maintenant est de mettre à niveau vers les rails 4.1, et d'intégrer Spring, ce qui vous permettra d'arrêter complètement d'utiliser Zeus. –

+0

Correction pour moi, merci. :) – Gerry

1

Autre cause, également dans le spec_helper.rb est en utilisant le code suivant:

RSpec.configure do |config| 
    #config stuff 
end 

les tests ont été exécutés qu'une seule fois après avoir enlevé ce code.

+0

[J'ai eu le code de configuration où vous avez le commentaire] (http://i.imgur.com/sApPy0a.png). En l'enlevant, mes tests ont été exécutés une fois. Je ne suis pas sûr pourquoi. On dirait que je devrais utiliser '~/.rspec' à la place. – Dennis

8

Les configurations de duplication dans spec_helper.rb et .rspec provoquaient l'exécution de mes tests deux fois.

par exemple.

.rspec

--color 

spec_helper.rb

Rspec.configure do |config| 
    config.color = true 
end 

Il semble donc dupliquer le test lorsque vous avez la configuration même paramètre dupliqué dans .rspec et spec_helper.rb

+0

Avoir le fichier '.rspec' seul l'a fait courir deux fois, je n'avais même pas besoin des réglages en double –

+0

J'avais' --color' et '--format d' dans' '/ .rspec' et' config. color = true' et 'config.formatter =: documentation' dans mon code. Je devais me débarrasser des doublons pour ne pas faire tourner deux fois rspec (cela n'avait pas d'importance si je retirais du code ou du fichier de configuration). – dentarg

+0

Plus d'infos: "Vous ajoutez deux formateurs, donc obtenir le double de la sortie", dit le propriétaire de rspec à https://github.com/rspec/rspec-core/issues/1929#issuecomment-90771361 – dentarg

5

Turns out Rails a tâche par défaut spec, donc si vous utilisez Rails, la solution au problème serait de supprimer la tâche prédéfinie puis ré-initialiser votre logique personnalisée, comme ceci:

# ... beginning of Rails Rakefile 
Rails.application.load_tasks 

Rake::Task["spec"].clear 

RSpec::Core::RakeTask.new(:spec) do |t| 
    # your logic here 
end 
1

J'ai observé une chose similaire. Mais dans mon cas ce n'est pas que les tests ont couru deux fois, ils ont été imprimés deux fois.

La raison pour cela, j'ai découvert, c'est que je alias rspec à rspec -f d -c (documentation de mise en forme et couleur).

Et le spec_helper.rb contient

config.color = true 
config.formatter = :documentation 

donc essentiellement ces informations sont dupliquées. Après avoir exécuté unalias rspec, je réexécute mes tests, le problème est résolu.

Vous pouvez également avoir un fichier .rspec qui contient des informations similaires:

--format d 
--color 

Cela pourrait également entraîner la duplication. Alors modifiez ou déplacez ce fichier.

Questions connexes