Rails 3.1エンジンを開発していて、テストしたいと思います。私はこれにRSpecを使用しており、すべてがうまく機能していますが、Sporkを使用しようとすると、ヘルパーが正しくリロードされないという問題があります。
モデルに関する同様の問題について多くのことを読み、次の可能な修正を思いつきました。
# my_engine/spec/spec_helper.rb
ActiveSupport::Dependencies.clear
ActiveRecord::Base.instantiate_observers
Dir[File.join(File.dirname(__FILE__), '..', 'app', 'helpers', '*.rb')].each do |file|
require file
end
# my_engine/spec/dummy/config/environments/test.rb
Dummy::Application.configure do
# ...
config.cache_classes = !(ENV['DRB'] == 'true') # Ensure that classes aren't cached when using Spork.
# ...
end
これは、ヘルパーファイルを確実にリロードしている限り機能します(これを確認するためにブレークポイントを追加しました)が、変更はテストに反映されず、Sporkの再起動のみが反映されます。ヘルパーがモジュールであり、テストがモジュールに依存せず、モジュールを実装するクラスに依存しているためか、モジュールは適切に再ロードされますが、適切に混合されていませんか?
現時点では、すべての初期化コードをeach_runブロックに配置しています。
# Configure Rails Environment
ENV["RAILS_ENV"] = "test"
require File.expand_path("../dummy/config/environment.rb", __FILE__)
require 'rspec/rails'
Rails.backtrace_cleaner.remove_silencers!
# Load support files
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
RSpec.configure do |config|
config.use_transactional_fixtures = true
config.treat_symbols_as_metadata_keys_with_true_values = true
config.filter_run :focus => true
config.run_all_when_everything_filtered = true
end