автотест не работает с общими примерами rspec - PullRequest
3 голосов
/ 29 августа 2011

Мои тесты выглядят так:

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

1 Ответ

2 голосов
/ 31 августа 2011

Получил сам ... реорганизация структуры папок.

  • создал новую папку spec/shared/ и переместил туда все примеры
  • удалил все require *_shared.rb из моих примеров
  • добавлено Dir[Rails.root.join("spec/shared/**/*.rb")].each {|f| require f} к spec_helper.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
  }
...