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 запускается после каждой задачи.