我已在我的规范文件中标记了我的规格要求使用:js => true
的硒。我想要实现的是,警卫将始终首先运行非:js
规范,仅在这些规范全部通过时运行标记为:js
的规范。
这是我目前的Guardfile
:
group 'non-javascript specs' do
guard 'rspec', cmd: 'zeus rspec --color --format nested --fail-fast -t ~js', parallel: false, bundler: false, :all_on_start => false, :all_after_pass => false, :keep_failed => false do
notification :terminal_notifier
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { "spec" }
# Rails example
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
watch(%r{^app/(.*)(\.erb|\.haml|\.jbuilder)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/features/#{m[1]}_spec.rb"] }
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
watch('config/routes.rb') { "spec/routing" }
watch('app/controllers/application_controller.rb') { "spec/controllers" }
watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
end
end
group 'javascript specs' do
guard 'rspec', cmd: 'zeus rspec --color --format nested --fail-fast -t js', parallel: false, bundler: false, :all_on_start => false, :all_after_pass => false, :keep_failed => false do
notification :terminal_notifier
watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
watch(%r{^spec/requests/.+_spec\.rb$})
watch(%r{^spec/features/.+_spec\.rb$})
end
end
但是,使用此配置,它将分割js
和非js
规范的执行,但即使非js
规范,也会始终运行js
规范失败。
如果第一组未通过,我如何告诉警卫不要运行第二组?
答案 0 :(得分:6)
要清理一下,请将其放在.rspec
或.rspec-local
文件中:
--color
--format nested
--fail-fast
group 'specs', halt_on_fail: true do
js_opts = { parallel: false, bundler: false, :all_on_start => false, :all_after_pass => false, :keep_failed => false }
guard 'rspec', js_opts.merge(cmd: 'zeus rspec -t ~js'), do
# (...)
end
guard 'rspec', js_opts.merge(cmd: 'zeus rspec -t js'), do
# (...)
end
end
这应该按预期工作。如果没有在https://github.com/guard/guard中提交错误问题。
哦,我认为你在第一组中需要:all_after_pass => true
- 因为你可能希望所有的快速测试在尝试慢速测试之前都是绿色的(除非快速测试是独立的,不太可能是破碎,太多,无法运行所有这些)。
答案 1 :(得分:0)
我认为修复是将两个组合并为一个组,并在命令之间使用&&
。这样,只有当第一部分返回true时,命令的第二部分才会运行:
cmd: `zeus rspec --color --format nested --fail-fast -t ~js && zeus rspec --color --format nested --fail-fast -t js`
有关&&
的更多信息,请参阅What is the purpose of "&&" in a shell command?。