3

我的测试是这样工作的:自动测试不使用RSpec共享实例

<<< spec/models/user_shared.rb 

shared_examples_for "a user" do 
end 

<<< spec/models/worker_spec.rb 

require 'spec_helper' 
require 'models/user_shared' 

describe Worker do 
    it_behaves_like "a user" 
end 

我可以成功运行rspec spec。但autotest失败:

Exception encountered: #<ArgumentError: Shared example group 'a user' already exists> 

这是,因为autotest产生的RSpec的命令行包括user_shared.rb

/usr/local/rvm/rubies/ruby-1.9.2-p290/bin/ruby -rrubygems -S /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/bin/rspec --tty [...] '/path/to/project/spec/models/worker_spec.rb' '/path/to/project/spec/models/user_shared.rb' 
Running tests with args ["--color", "--tty", [...], "/path/to/project/spec/models/worker_spec.rb", "/path/to/project/spec/models/user_shared.rb"]... 
Done. 

Exception encountered: #<ArgumentError: Shared example group 'a user' already exists> 

当我在命令行删除'/path/to/project/spec/models/user_shared.rb'和手工执行它,它的工作原理。

现在,如果我改变我的user_shared.rb这样:

<<< spec/models/user_shared.rb 

if [email protected] then 
    @included = true 
    shared_examples_for "a user" do 
    end 
end 

它的工作原理与autotest生成的命令行了。但这是一个丑陋的解决方法。

由于rspec只知道“* _spec”文件是睾丸,autotest怎么能这样配置?

在我的Gemfile我有以下的(有关测试):

<<<< Gemfile 

gem 'autotest' 
gem 'autotest-rails' 

group :test do 
    gem 'rspec-rails', '>= 2.6.1' 
    gem 'shoulda-matchers' 
    gem 'factory_girl_rails', '>= 1.0.2' 
    gem 'capybara', '>= 1.0.0' 
    gem 'cucumber-rails', '>= 1.0.2' 
    gem 'database_cleaner', '>= 0.6.7' 
    gem 'spork', '>= 0.9.0.rc' 
end 

回答

2

明白了自己...文件夹结构的重组。

  • 创建新的文件夹spec/shared/和我的例子
  • 添加Dir[Rails.root.join("spec/shared/**/*.rb")].each {|f| require f}spec_helper.rb
  • 在那里
  • 感动了所有的例子除去任何require *_shared.rb调整了自动测试:

<<< .autotest 

    at.add_mapping(%r%^spec/shared/.*rb%) { |_, _| 
    Dir['spec/**/*_spec.rb'] # could be tweaked to just run tests that have this example 
          # but for now I don't care - just run all tests 
    }