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

Jam*_*sen 17 ruby unit-testing rspec

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

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

我有以下内容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'
Run Code Online (Sandbox Code Playgroud)

我有一个声明的规格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
Run Code Online (Sandbox Code Playgroud)

当我运行时rake spec,单个示例运行两次.我可以通过让示例失败来检查它,给我两个红色的"F".

我想到的一件事是添加specSpecTask's' libs会导致它们被双重定义,但删除它似乎没有任何影响.

Yos*_*sho 19

我有这个问题使用宙斯,并require 'rails/autorun'从我spec_helper.rb停止它为我


van*_*oom 9

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

例如

.rspec

--color
Run Code Online (Sandbox Code Playgroud)

spec_helper.rb

Rspec.configure do |config|
  config.color = true
end
Run Code Online (Sandbox Code Playgroud)

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

  • 更多信息:“您添加了两个格式化程序,因此输出加倍”,rspec 所有者在 https://github.com/rspec/rspec-core/issues/1929#issuecomment-90771361 说道 (2认同)

Yar*_*iuk 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
Run Code Online (Sandbox Code Playgroud)


Dav*_*sky 2

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

另外,'spec/autorun'也会require 'spec'为你。

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

HTH,大卫