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".
我想到的一件事是添加spec到SpecTask's' libs会导致它们被双重定义,但删除它似乎没有任何影响.
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配置设置时,它似乎会复制测试
事实证明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)
不知道这是否可以解决问题,但您可以require 'spec_helper'使用require File.dirname(__FILE__) + '/../spec_helper'
另外,'spec/autorun'也会require 'spec'为你。
我能想到的唯一一件事是您的系统中定义了两个规范任务。这是一个 Rails 应用程序吗?如果是这样,请确保您没有复制 中已存在的 rake 任务lib/rake/tasks。
HTH,大卫