如何立即用警卫和工厂女郎给工厂起毛?

How to lint factories immediately with guard and factory girl?

每次更换工厂时,我需要在我的 Guardfile(在 Rails 带有 RSpec 和 FactoryGirl 的应用程序中)添加什么来检查我的所有工厂?

我知道可以 运行 所有模型规范,根据这个问题:Using guard-rspec with factory-girl-rails,但我只想对它们全部进行 lint。

我尝试在 Guardfile 中这样做,但还不够:

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

提前致谢。

很清楚你想做什么,但那样做是行不通的。

Guard 没有 运行 "within" 应用程序。它 运行s RSpec 作为一个过程。调用 FactoryGirl.lint 是在 Guard 中调用的,而不是在 RSpec 进程中调用的(这是你想要的)。

这里的 "trick" 将创建一个 "fake" spec 文件,除了 linting 之外什么都不做,所以你可以这样做:

guard :rspec do
  watch(%r{^spec/factories/(.+)\.rb$}) { 'spec/linting_spec.rb' }
end

工作原理如下:

  1. 每当工厂文件更改时,Guard 都会启动 Guard::RSpec 并带有 'spec/linting_spec.rb'(或任何您命名的名称)。
  2. Guard::RSpec 只是调用 rspec spec/linting_spec.rb.

所以只要 rspec spec/linting_spec.rb 像你想要的那样工作,你就可以像上面那样 "plug" 进入守卫。

spec/linting_spec.rb 可以只对模型进行一次 "fake" RSpec 测试 - 足以触发 linting。

这样你将只有 linting - 而没有 运行任何模型测试。