Я разобрался в своей проблеме. Это был на самом деле автотест, а не Spork. Я перешел с монтируемого двигателя на стандартный двигатель (плагин), так как он стал лучше подходить для того, что мне нужно.
Сейчас я использую выпущенную версию Rails 3.1.
В этом сценарии я подумал, что все будет проще, но я столкнулся с той же проблемой. В любом случае, это оказалось исправлением для тестирования движка без пространства имен (монтируемого), хотя с некоторыми изменениями пути я думаю, что он будет работать.
Добавить файл .autotest в корень проекта со следующим:
Autotest.add_hook :initialize do |at|
at.add_mapping %r%^app/models/(.*)\.rb$% do |_, m|
"spec/models/#{m[1]}_spec.rb"
end
at.add_mapping %r%^app/controllers/(.*)\.rb$% do |_, m|
["spec/controllers/#{m[1]}_spec.rb",
"spec/functional/#{m[1]}_spec.rb"]
end
at.add_mapping %r%^app/helpers/(.*)_helper.rb% do |_, m|
["spec/views/#{m[1]}_view_spec.rb",
"spec/functional/#{m[1]}_controller_spec.rb"]
end
at.add_mapping %r%^app/views/(.*)/% do |_, m|
["spec/views/#{m[1]}_view_spec.rb",
"spec/functional/#{m[1]}_controller_spec.rb"]
end
end
Я нашел решение, когда наткнулся на этот ответ на другой вопрос: как настроить автотест для правильного отслеживания изменений в источнике приложения? , а также другие примеры, найденные в Интернете.
Надеюсь, это поможет кому-то еще.
[Изменить 2011-09-20]
Исправлена проблема с огурцом / Spork с помощью "хака". Внутри блока Spork.each_run я принудительно перезагрузил модели и контроллеры, например так:
ENGINE_ROOT=File.join(File.dirname(__FILE__), '../../')
# Couldn't get spork to reload models, hence the reason for this hack
Dir[File.join(ENGINE_ROOT, "app/models/*.rb")].each {|f| load f }
# or controllers...
Dir[File.join(ENGINE_ROOT, "app/controllers/*.rb")].each {|f| load f }
Кажется, должен быть лучший способ ...