2010-06-12 64 views
15

我有以下的RSpec(1.3.0)的任务在我Rakefile定义:为什么我的RSpec规格运行两次?

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”。

我认为的一件事是,的SpecTasklibs是造成它们双重定义,但删除似乎没有任何效果。

回答

2

不知道如果这能解决问题,但你可以使用require 'spec_helper'代替require File.dirname(__FILE__) + '/../spec_helper'

此外,'spec/autorun'require 'spec'你。

我能想到的唯一的其他事情就是您在系统中定义了两个spec任务。这是一个轨道应用程序?如果是这样,请确保您没有复制lib/rake/tasks中已存在的耙子任务。

HTH, 大卫

+0

这不是一个Rails应用程序,所以这不是问题。如果我的'$ LOAD_PATH'已经设置好了,我只能执行'require'spec_helper'',但如果我想运行一个spec,'$ LOAD_PATH'直到'spec_helper.rb'内部才会被设置。 – 2010-06-13 17:35:50

19

我不得不使用宙斯以及除去require 'rails/autorun'spec_helper.rb停止对我来说

+0

我没有这条线,我仍然有这个问题。任何其他想法? – 2014-04-28 00:56:05

+1

我现在可以给你的最好的建议是升级到rails 4.1,并且内置Spring,这将允许你完全停止使用Zeus。 – 2014-04-28 13:00:26

+0

修复了我的问题,谢谢。 :) – Gerry 2014-06-17 02:43:02

1

其他原因,也是在spec_helper.rb这方面的问题使用以下代码:

RSpec.configure do |config| 
    #config stuff 
end 

删除此代码后仅执行一次测试。

+0

[我有配置代码,你有评论](http://i.imgur.com/sApPy0a.png)。删除它使我的测试运行一次。我不知道为什么。看起来我需要使用'〜/ .rspec'来代替。 – Dennis 2014-05-04 20:58:28

8

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

例如

.rspec

--color 

spec_helper.rb

Rspec.configure do |config| 
    config.color = true 
end 

所以它出现时,你有相同的配置.rspec和spec_helper设置复制到复制测试。RB

+0

单独拥有'.rspec'文件使其运行两次,甚至不需要重复设置 – 2015-03-26 14:56:38

+0

我在'〜/ .rspec'和'config中有'--color'和'--format d'。 color = true'和'config.formatter =:documentation'在我的代码中。必须摆脱重复,不要rspec运行两次(没关系,如果我从代码或配置文件中删除)。 – dentarg 2015-06-08 14:21:13

+0

更多信息:“您正在添加两个格式化器,因此获得了两倍的输出量”,rspec所有者在https://github.com/rspec/rspec-core/issues/1929#issuecomment-90771361 – dentarg 2015-06-08 14:32:19

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 
1

我观察到类似的事情。但在我看来,这不是测试运行两次,而是两次打印。

我找到的原因是我的别名为rspecrspec -f d -c(格式化文档和颜色)。

而且spec_helper.rb包含

config.color = true 
config.formatter = :documentation 

所以基本上这个信息是重复的。运行unalias rspec后,我再次运行测试,问题得到解决。

你也可以有一个包含类似信息一个.rspec文件:

--format d 
--color 

这也可能导致重复。所以修改或移动这个文件。