为什么我的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”。
我认为有一件事是在SpecTask
的libs
中添加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
删除此代码后,测试仅执行一次。