使用guard-rspec与factory-girl-rails

时间:2014-11-17 17:42:15

标签: ruby-on-rails ruby rspec guard

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

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

5 个答案:

答案 0 :(得分:4)

添加到您自己的答案:

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

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

或包括相关控制人:

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

答案 1 :(得分:1)

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

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

其中according to the documentation告诉当前警卫注意spec/factories/

中* .rb文件的更改

答案 2 :(得分:1)

更多地限制与工厂相关的特定规格,它应该是:

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

答案 3 :(得分:0)

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

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

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

如果您设置块的返回值为&spec; model&model 39,则只运行spec / models目录下的规格。

答案 4 :(得分:0)

我使用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"),
  ]
}