为什么我的RSpec规格会运行两次?

我在我的Rakefile定义了以下RSpec(1.3.0)任务:

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

我在spec/spec_helper.rb有以下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' 

我在spec/foo/foo_spec.rb声明了一个spec:

 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 

当我运行rake spec ,单个示例运行两次。 我可以通过使示例失败来检查它,给我两个红色的“F”。

我认为有一件事是在SpecTasklibs中添加spec会导致它们被双重定义,但删除它似乎没有任何影响。

我有使用zeus的问题,并从我的spec_helper.rb删除require 'rails/autorun'为我停止它

spec_helper.rb和.rspec中的重复配置导致我的测试运行两次。

例如

.rspec

 --color 

spec_helper.rb

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

因此,当您在.rspec和spec_helper.rb中复制了SAME配置设置时,它似乎会复制测试

事实certificateRails有默认的spec任务,所以如果你使用Rails,问题的解决方案是清除预定义的任务,然后重新初始化你的自定义逻辑,如下所示:

 # ... beginning of Rails Rakefile Rails.application.load_tasks Rake::Task["spec"].clear RSpec::Core::RakeTask.new(:spec) do |t| # your logic here end 

这与问题没有直接关系,因为这显然涉及从2开始的Rspec版本,但由于问题的标题与我在这里相同,我提到其他人可能会因为同样的原因找到这个页面,因为有了rspec.rake你的lib/tasks rspec.rake会导致rake spec运行所有规范测试两次。 删除该文件对我有帮助(如http://www.patrickgannon.net/post/519eed022c17433fc8000018/rake-runs-rspec-tests-twice所示 )

不知道这是否解决了问题,但您可以使用require 'spec_helper'而不是require File.dirname(__FILE__) + '/../spec_helper'

另外, 'spec/autorun'require 'spec'给你。

我能想到的唯一另一件事是你在系统中定义了两个规范任务。 这是一个rails应用程序吗? 如果是这样,请确保您没有复制lib/rake/tasks中已存在的lib/rake/tasks

HTH,大卫

我发现了类似的事情。 但在我的情况下,并不是测试运行了两次,而是打印了两次。

我发现,原因是我将rspec -fd -c别名为rspec -fd -c (格式化文档和颜色)。

spec_helper.rb包含

 config.color = true config.formatter = :documentation 

所以基本上这些信息是重复的。 在我运行unalias rspec ,我再次运行测试,问题得到解决。

您可能还有一个包含类似信息的.rspec文件:

 --format d --color 

这也可能导致重复。 所以修改或移动这个文件。

其他原因,也在spec_helper.rb中使用以下代码:

 RSpec.configure do |config| #config stuff end 

删除此代码后,测试仅执行一次。