如何与警卫和工厂女孩立即丢失工厂?

时间:2016-04-27 13:07:56

标签: ruby-on-rails rspec factory-bot guard

每次更换工厂时,我需要将我的Guardfile(在带有RSpec和FactoryGirl的Rails应用程序中)放入我的所有工厂?

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

我尝试在Guardfile中执行此操作,但这还不够:

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

很清楚你想做什么,但不会那样。

Guard不会在应用程序内“运行”。它运行RSpec作为一个过程。在Guard中调用FactoryGirl.lint,而不是在RSpec过程中调用(这是你想要的)。

这里的“技巧”是创建一个“假的”spec文件,除了linting之外什么都不做,所以你可以这样做:

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

以下是它的工作原理:

  1. 每当工厂文件发生变化时,Guard都会使用'spec / linting_spec.rb'(或任何你的名字)启动Guard :: RSpec。
  2. Guard :: RSpec只需拨打rspec spec/linting_spec.rb
  3. 因此,只要rspec spec/linting_spec.rb按照您的意愿运作,您就可以像上面那样将其“插入”保护。

    spec/linting_spec.rb只能对模型进行一次“伪造的”RSpec测试 - 足以触发掉落。

    这样你就可以获得linting - 并且不进行任何模型测试。