Как разрешить конфликт cache_clases = true / false, используя Spork, RSpec & Cucumber? - PullRequest
0 голосов
/ 21 января 2012

В RSpec у меня были проблемы целую вечность, поскольку мои модели не перезагружались между запусками Spork.

Я в конце концов исправил это, изменив следующую строку в config/environments/test.rb:

config.cache_classes = true

стал

config.cache_classes = false

HOWEVER ... в то время как это решило проблемы для RSpec, Cucumber требует, чтобы cache_classes был установлен в true .https://rspec.lighthouseapp.com/projects/16211/tickets/165

Существует ли каноническое решение для этого, которое работает как для RSpec, так и для Cucumber и которое успешно перезагружает модели RSpec?

Сноска

*Другие изменения, которые я реализовал, чтобы сделать модели перезагрузки RSpec, включали добавление следующих строк в spec_helper.rb:

ActiveSupport::Dependencies.clear
FactoryGirl.reload

Ни одна из этих строк не решила проблему без установки cache_classes=true строки.

1 Ответ

2 голосов
/ 20 июля 2012

У меня была эта проблема, и для меня это произошло из-за потокового режима Rails. Обеспечение config.threadsafe! не вызывал в моей тестовой среде исправил это для меня. Это потому, что потокобезопасный режим предотвращает повторную загрузку кода при каждом запросе и отключает автоматическую загрузку зависимостей, на которую, как мне кажется, spork полагался в each_run.

Я звонил в config.threadsafe! в application.rb, поэтому я удалил этот вызов оттуда и вместо этого поместил его в development.rb и production.rb. Теперь я могу оставить config.cache_classes равным true, и rspec и cucumber успешно работают под spork. Обратите внимание, что я использовал Mongoid в своем слое постоянства и Machinist вместо FactoryGirl, поэтому YMMV.

См. Также http://rickyrobinson.id.au/2012/07/20/when-spork-puts-a-fork-in-your-cucumber-and-a-spanner-in-your-specs

...