我正在开发 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