我在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
中有以下代码:
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
的libs
会导致它们双重定义,但删除它似乎没有任何效果。
9条答案
按热度按时间zu0ti5jz1#
我在使用zeus时遇到了这个问题,从我的
spec_helper.rb
中删除require 'rails/autorun'
为我停止了这个问题gkn4icbw2#
spec_helper.rb和.rspec中的重复配置导致我的测试运行两次。
例如,在
.报告规范
规格_助手.rb
因此,当您在.rspec和spec_helper.rb中复制了相同的配置设置时,它似乎复制了测试
qybjjes13#
Rails有默认的
spec
任务,所以如果你使用Rails,问题的解决方案是清除预定义的任务,然后重新初始化你的自定义逻辑,如下所示:6ioyuze24#
这与问题没有直接关系,因为这显然涉及到Rspec 2以上的版本,但由于问题的标题与我来到这里的标题相同,我向其他可能出于同样原因找到此页面的人提到,在您的
lib/tasks
中包含rspec.rake
可能会导致rake spec
运行所有规范测试两次。http://www.patrickgannon.net/post/519eed022c17433fc8000018/rake-runs-rspec-tests-twice)pxiryf3j5#
我观察到了类似的情况,但在我的例子中,测试并不是运行了两次,而是打印了两次。
我发现,这是因为我将
rspec
作为rspec -f d -c
的别名(格式化文档和颜色)。并且spec_helper.rb包含
所以本质上这些信息是重复的。在我运行
unalias rspec
之后,我再次运行我的测试,问题就解决了。您可能还有一个包含类似信息的.rspec文件:
这也可能导致重复。所以修改或移动此文件。
wfauudbj6#
不知道这是否解决了问题,但您可以使用
require 'spec_helper'
而不是require File.dirname(__FILE__) + '/../spec_helper'
同样,
'spec/autorun'
将为您提供require 'spec'
。我唯一能想到的是,你的系统中定义了两个spec任务,这是一个rails应用程序吗?如果是的话,确保你没有复制
lib/rake/tasks
中已经存在的rake任务。戴维·特赫
c3frrgcw7#
我们今天在我的公司遇到了这个问题,这是出于另一个原因,这里没有提到:我们自动加载了一些包含测试逻辑的文件,然后在需要代码时运行这些文件:
解决方案是删除自动加载代码,Rails + tests中的这类代码不是很常规,通常指向糟糕的文件结构。
lrpiutwd8#
另一个原因,也在spec_helper.rb中使用以下代码:
删除此代码后,仅执行了一次测试。
yvgpqqbh9#
我的主目录中有一个
.rspec
文件,而我的项目.rspec
也在当前目录中。从主目录中删除额外的
.rspec
文件为我修复了它。