我已经能够使用RSpec,Cucumber和Autotest来对抗我的Rails 3.1可安装引擎。事情陷入困境的是试图将Spork融入其中。 Spork运行正常,我的测试使用Spork,但我遇到的问题是Spork不会重新加载模型,除非我关闭Spork服务器并不是非常有效。我也在使用factory_girl。我使用Spork.trap_method尝试了各种各样的事情,但没有任何效果。
这是我正在使用的宝石(虽然我已经在我的项目中放弃了Spork,因为它引起了我的悲痛):
谢谢,
-Damien
答案 0 :(得分:2)
我发现了我的问题。它实际上是自动测试,而不是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
当我在另一个问题上遇到这个答案时,我提出了解决方案:how to tell autotest to correctly track changes in app source?,以及网络上发现的其他示例。
希望这有助于其他人。
[编辑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 }
似乎应该有更好的方法......