Мои тесты выглядят так:
<<< 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>
Это потому, что командная строка rspec, сгенерированная autotest
, включает в себя 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 !@included 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