Ruby on rails 将防护罩rspec与工厂女孩导轨一起使用
我在Rails项目中将其用作固定装置的替代品。我还使用自动运行我的规格。Guard没有拾取我对工厂文件所做的更改(例如,Ruby on rails 将防护罩rspec与工厂女孩导轨一起使用,ruby-on-rails,ruby,rspec,guard,Ruby On Rails,Ruby,Rspec,Guard,我在Rails项目中将其用作固定装置的替代品。我还使用自动运行我的规格。Guard没有拾取我对工厂文件所做的更改(例如,spec/factories/users.rb)-我必须停止Guard,然后重新初始化它以拾取这些更改 有哪些方法可以避免这种手工操作?经过一番搜索,我偶然发现了要点并提取了: watch(%r{^spec/factories/(.+)\.rb$}) 它告诉当前的守卫注意spec/factories/中的*.rb文件中的更改,以添加到您自己的答案中: 我限制了它运行的内容,因
spec/factories/users.rb
)-我必须停止Guard,然后重新初始化它以拾取这些更改
有哪些方法可以避免这种手工操作?经过一番搜索,我偶然发现了要点并提取了:
watch(%r{^spec/factories/(.+)\.rb$})
它告诉当前的守卫注意
spec/factories/
中的*.rb文件中的更改,以添加到您自己的答案中:
我限制了它运行的内容,因此不会运行太多:
watch(%r{^spec/factories/(.+)\.rb$}) { "spec/models" }
或包括相关控制人:
watch(%r{^spec/factories/(.+)\.rb$}) { |m|
["spec/models/", "spec/controllers/#{m[1]}_controller_spec.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 }
它将自动运行整个规格文件
如果将块的返回值设置为“spec/models”,则它只运行spec/models dir下的specs。我使用它来获取要监视的所有文件名的列表。这也适用于嵌套文件夹结构
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"),
]
}
特别是在更大的项目中,在我看来,做
需要'active\u support/definctor'
是非常值得的,因为您实际上正在缩小要在这里运行的测试的范围。太棒了,谢谢!我认为这将是非常低效的。这将运行大量与spec/factories/users.rb
中的更改无关的规范。例如,hi@jmera,您在某种意义上是对的。“更多的测试更多的风险降低如果所有的规范运行都会大大降低工作效率,那么基于层的测试策略是解决这个问题的好方法,@jmera