Rails Spring/Rspec/Guard выдает ошибки, когда их не было до Spring

Я использовал RSpec/Guard без Spring до обновления с Rails 4.0 до 4.1, и все мои тесты проходили без какого-либо вывода, кроме зеленых точек и зеленого текста. После обновления и установки Spring вместе со всем, что якобы мне нужно, я получаю ошибки в моих проходящих тестах, и иногда мои тесты не проходят из-за ошибок "уникальности".

Распространенная ошибка между прохождением и провалом теста:

An error occurred in an after(:all) hook.
  NameError: uninitialized constant Recipe
  occurred at /home/user/.rvm/gems/ruby-2.1.0@global/gems/activesupport-4.1.0/lib/active_support/inflector/methods.rb:238:in 'const_get'

Теперь ловушка after(:all) просто удаляет все объекты Manager::Wine (и рецепты объекта Manager::Wine has_many). Manager - это рельсовый двигатель, в котором есть модели Wine и Recipe. Нигде в классе Wine он не указывает явно константу Recipe. Но, как я уже говорил, эта ошибка не появлялась в обычных тестах RSpec/Guard, пока я не обновил и не установил Spring.

Другие сбои являются результатом "атрибутов уже были взяты". Например, из-за этого стандартные ("действительные фабричные") тесты не выполняются после create(). Но я указал в RSpec:

config.before(:each) do
    DatabaseCleaner.start
end

и я не получал этих ошибок в моих рандомизированных тестах до весны.

Фрагмент Gemfile:

group :development, :test do
    gem 'spring'
    gem 'rspec-rails'
    gem 'guard'
    gem 'guard-rspec', require: false
    gem 'spring-commands-rspec'
    gem 'factory_girl_rails'
    gem 'database_cleaner'
end

Guardfile содержит:

guard :rspec, cmd:"spring rspec" do

Rails app_root / bin содержит файлы:

rails
rake
rspec
spring

???

1 ответ

Решение

Действительно странно Я не был уведомлен об этой проблеме раньше, но приложение больше не могло определить отношения HABTM между Wines и Recipes. Я обновил свои модели, чтобы включить join_table аргумент и я больше не получаю ошибки "неопределенная константа". Я узнал об этом только потому, что загрузил приложение в браузер и получил лучшее сообщение об ошибке. По-прежнему возникают проблемы с "дублированием записи".

Кроме того, я удалил вызовы destroy_all для каждой модели, так как считаю, что в этом нет необходимости, поскольку DatabaseCleaner запускается после каждой задачи.

Другие вопросы по тегам