rspec 失败时执行命令
rspec execute command on failure
鉴于我有一个像
这样的测试
expect(['x', 'y', 'z']).to be_empty
如何在测试失败时执行命令,例如,将失败测试的内容放入 csv 文件,其中的行名称特定于该测试中的数据。
我能想到的最好的方法是
begin
expect(['x', 'y', 'z']).to be_empty
rescue RSpec::Expectations::ExpectationNotMetError => e
#output to csv
raise e
end
然而,这并不是最干净的方法。
另一种选择是将它放在 cucumber 的失败钩子上,但是我会失去指定行名的能力,或者需要事先定义行名,这也感觉很奇怪。
有没有更简洁、更精确的方法来解决这个问题?
注意:这些测试运行使用黄瓜
您可以使用 after
钩子来检查示例状态。
http://www.rubydoc.info/github/rspec/rspec-core/RSpec/Core/Example#exception-instance_method
after do |example|
if example.exception.nil?
# passed
else
# failed
end
end
我也希望能够做到这一点!所以我写了一个gem,让你定义一个on_failure
处理程序来输出任何有助于调试的信息(或执行任何你想要的Ruby代码)。
使用 rspec-on_failure
,您可以像这样编写示例:
on_failure ->{ output_to_csv } do
expect(['x', 'y', 'z']).to be_empty
end
或者这个:
on_failure ->{ output_to_csv }
expect(['x', 'y', 'z']).to be_empty
鉴于我有一个像
这样的测试expect(['x', 'y', 'z']).to be_empty
如何在测试失败时执行命令,例如,将失败测试的内容放入 csv 文件,其中的行名称特定于该测试中的数据。
我能想到的最好的方法是
begin
expect(['x', 'y', 'z']).to be_empty
rescue RSpec::Expectations::ExpectationNotMetError => e
#output to csv
raise e
end
然而,这并不是最干净的方法。
另一种选择是将它放在 cucumber 的失败钩子上,但是我会失去指定行名的能力,或者需要事先定义行名,这也感觉很奇怪。
有没有更简洁、更精确的方法来解决这个问题?
注意:这些测试运行使用黄瓜
您可以使用 after
钩子来检查示例状态。
http://www.rubydoc.info/github/rspec/rspec-core/RSpec/Core/Example#exception-instance_method
after do |example|
if example.exception.nil?
# passed
else
# failed
end
end
我也希望能够做到这一点!所以我写了一个gem,让你定义一个on_failure
处理程序来输出任何有助于调试的信息(或执行任何你想要的Ruby代码)。
使用 rspec-on_failure
,您可以像这样编写示例:
on_failure ->{ output_to_csv } do
expect(['x', 'y', 'z']).to be_empty
end
或者这个:
on_failure ->{ output_to_csv }
expect(['x', 'y', 'z']).to be_empty