我在Rakefile
:
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
中有以下内容:
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
声明了一个规范:
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”。
我认为有一件事是将spec
添加到SpecTask
的{{1}}导致它们被双重定义,但删除它似乎没有任何效果。
答案 0 :(得分:19)
我使用 zeus 时出现此问题,并从require 'rails/autorun'
中移除spec_helper.rb
为我停止了
答案 1 :(得分:9)
spec_helper.rb和.rspec中的重复配置导致我的测试运行两次。
e.g。
<强> .rspec 强>
--color
<强> spec_helper.rb 强>
Rspec.configure do |config|
config.color = true
end
因此,如果在.rspec和spec_helper.rb中重复了SAME配置设置,它似乎会复制测试
答案 2 :(得分:5)
结果Rails有默认的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
答案 3 :(得分:3)
这与问题没有直接关系,因为这显然涉及从2开始的Rspec版本,但由于问题的标题与我的相同,我提到其他可能因同样的原因找到此页面的人, rspec.rake
中{{}}} lib/tasks
会导致rake spec
两次运行所有规范测试。删除该文件对我有帮助(如http://www.patrickgannon.net/post/519eed022c17433fc8000018/rake-runs-rspec-tests-twice)
答案 4 :(得分:2)
不知道这是否可以解决问题,但您可以使用require 'spec_helper'
代替require File.dirname(__FILE__) + '/../spec_helper'
另外,'spec/autorun'
将为您require 'spec'
。
我唯一能想到的是你在系统中定义了两个规范任务。这是一个rails应用程序吗?如果是,请确保您没有复制lib/rake/tasks
中已存在的佣金任务。
HTH, 大卫
答案 5 :(得分:2)
我发现,原因是我将rspec
别名为rspec -f d -c
(格式化文档和颜色)。
spec_helper.rb包含
config.color = true
config.formatter = :documentation
所以基本上这些信息是重复的。运行unalias rspec
后,我再次运行测试,问题得到解决。
您可能还有一个包含类似信息的.rspec文件:
--format d
--color
这也可能导致重复。所以修改或移动这个文件。
答案 6 :(得分:1)
其他原因,也在spec_helper.rb中使用以下代码:
RSpec.configure do |config|
#config stuff
end
删除此代码后,测试仅执行一次。
答案 7 :(得分:0)
我们公司今天遇到了这个问题,这是由于这里没有提到的另一个原因:我们正在自动加载一些包含测试逻辑的文件。然后,当首先需要代码时就运行了这些代码:
hoverProperty()
解决方案是删除自动加载代码。 Rails +测试中的这类代码不是很常规,通常会指出文件结构不良。