鉴于我有像
这样的测试 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
然而,这并不是最干净的方式。
另一种选择是把它放在黄瓜的失败钩子上,但是我会失去指定行名的能力,或者需要预先定义行名,这也感觉很奇怪。
有更干净,更精确的方法吗?
注意:这些测试正在使用黄瓜
运行答案 0 :(得分:1)
您可以使用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
答案 1 :(得分:0)
我也希望能够做到这一点!因此,我写了一个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