rspec执行命令失败

时间:2016-07-27 14:58:02

标签: ruby rspec cucumber

鉴于我有像

这样的测试

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

然而,这并不是最干净的方式。

另一种选择是把它放在黄瓜的失败钩子上,但是我会失去指定行名的能力,或者需要预先定义行名,这也感觉很奇怪。

有更干净,更精确的方法吗?

注意:这些测试正在使用黄瓜

运行

2 个答案:

答案 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