使用guard-rspec与factory-girl-rails

我正在使用factory_girl_rails替代我的Rails项目中的灯具。 我也使用guard-rspec自动运行我的规格。 Guard没有接受我对工厂文件所做的更改(例如spec/factories/users.rb ) – 我必须停止保护,然后重新初始化它以获取这些更改。

有哪些选项可以避免这种手动过程?

要添加到您自己的答案:

我限制它运行的内容,因此它不会运行太多:

 watch(%r{^spec/factories/(.+)\.rb$}) { "spec/models" } 

或包括相关控制人:

 watch(%r{^spec/factories/(.+)\.rb$}) { |m| ["spec/models/", "spec/controllers/#{m[1]}_controller_spec.rb"] } 

经过一番搜索,我偶然发现了这个要点并提取出来:

 watch(%r{^spec/factories/(.+)\.rb$}) 

根据文档 ,它告诉当前的警卫要注意spec/factories/中* .rb文件的变化

更多地限制与工厂相关的具体规格,它应该是这样的:

 require 'active_support/inflector' watch(%r{^spec/factories/(.+)\.rb$}) do |m| %W{ spec/models/#{m[1].singularize}_spec.rb spec/controllers/#{m[1]}_controller_spec.rb } end 

我在我的macbook上使用它,你应该在你的Guardfile中添加这一行

 watch(%r{^spec/factories/(.+)\.rb$}) { rspec.spec_dir } 

它会自动运行整个specs文件。

如果你设置块的返回值是’spec / models’,它只运行spec / models dir下的specs。

我使用Dir.glob获取我想要监视的所有文件名的列表。 这适用于嵌套文件夹结构。

 require 'active_support/inflector' watch(%r{^spec/factories/(.+)\.rb$}) { |m| [ *Dir.glob("spec/models/#{m[1].singularize}_spec.rb"), *Dir.glob("spec/requests/**/#{m[1]}_spec.rb"), *Dir.glob("spec/controllers/**/#{m[1]}_controller_spec.rb"), ] }