如何告诉自动测试正确跟踪应用程序源中的更改?

我希望每当我的某个rails应用程序的相关文件发生变化时,我都会自动测试以进行牛排验收测试。 在研究了Rspec和Cucumber自己的自动测试配置后,我正在尝试以下映射:

Autotest.add_hook :initialize do |at| at.add_mapping(%r%^spec/acceptance/.*_spec.rb$%, true) { |filename, _| filename } at.add_mapping(%r%^app/(models|controllers|helpers|lib)/. rb$%) { at.files_matching %r%^spec/acceptance/. _spec.rb$% } at.add_mapping(%r%^app/views/(.*)/. rb$%) { at.files_matching %r%^spec/acceptance/. _spec.rb$% } end 

Autotest.add_hook :initialize do |at| at.add_mapping(%r%^spec/acceptance/.*_spec.rb$%, true) { |filename, _| filename } at.add_mapping(%r%^app/(models|controllers|helpers|lib)/. rb$%) { at.files_matching %r%^spec/acceptance/. _spec.rb$% } at.add_mapping(%r%^app/views/(.*)/. rb$%) { at.files_matching %r%^spec/acceptance/. _spec.rb$% } end

Autotest.add_hook :initialize do |at| at.add_mapping(%r%^spec/acceptance/.*_spec.rb$%, true) { |filename, _| filename } at.add_mapping(%r%^app/(models|controllers|helpers|lib)/. rb$%) { at.files_matching %r%^spec/acceptance/. _spec.rb$% } at.add_mapping(%r%^app/views/(.*)/. rb$%) { at.files_matching %r%^spec/acceptance/. _spec.rb$% } end

第一个工作:只要牛排规格改变,它就会再次运行。

但第二和第三不。 更改/ app子目录下的任何源文件都会被忽略。

什么是让这些映射工作的正确方法?

谢谢奥利弗

我刚刚更改了我的.autotest文件来添加:

 Autotest.add_hook :initialize do |at| at.add_mapping(%r%^spec/acceptance/.*_spec.rb$%, true) { |filename, _| filename } at.add_mapping(%r%^app/(models|controllers|helpers|lib)/.*rb$%, true) { at.files_matching %r%^spec/acceptance/.*_spec.rb$% } at.add_mapping(%r%^app/views/(.*)$%, true) { at.files_matching %r%^spec/acceptance/.*_spec.rb$% } end 

这是有效的,但我不知道在其他人之前调用验收测试的附带效果( add_mapping上的true标志)

对于RSpec 1.3:

我不得不使用:post_initialize钩子,因为内置的RSpec支持从清除所有现有的映射开始。 所以它正在清除这些,然后添加默认的RSpec映射。 但是使用:post_initialize钩子(而不是:在第一行初始化)修复它。

我还必须将所有这些放在autotest / discover.rb而不是.autotest中。