如果在后钩中测试失败,则无法清除

时间:2019-03-14 15:21:35

标签: ruby rspec automated-tests

测试失败时,我会尝试做一些额外的事情。

这是测试失败:

it 'fails' do
  expect(1213).to eq('123456')
end

以下代码已添加到spec_helper:

RSpec.configure do |config|
  config.after(:each) do |example|
    if example.exception
      puts 'Do something'
    end
  end

结果如下:

  

预期:“ 123456”        得到:“ 1213”   (与==相比)

     

1个示例,1个失败,0个通过

     

2秒内完成

示例异常保持为零,我不明白。测试失败后,还有另一种方法来获得额外的代码吗?

2 个答案:

答案 0 :(得分:1)

这是答案(也是解决方案的主意)https://github.com/rspec/rspec-core/issues/2011#issuecomment-114669886

  

无论如何,直到后钩运行之后才设置状态。这是故意的,因为after钩子本身就是示例的一部分,如果after钩子中发生异常,我们会将示例的状态设置为:failed。 after挂钩对于清理/拆卸逻辑非常有用,但并非旨在观察示例的状态。相反,我建议您为此使用格式化程序...

答案 1 :(得分:0)

代码应该可以正常工作,您应该在STDOUT上打印“ F”之前看到“执行某些操作”,如下所示:

Randomized with seed 3598
Do something
F

Failures:

  1) Blah#blah fails
     Failure/Error: expect(1213).to eq('123456')

       expected: "123456"
            got: 1213

       (compared using ==)
     # ./spec/index_spec.rb:9:in `block (2 levels) in <top (required)>'

Finished in 0.01617 seconds (files took 0.09568 seconds to load)
1 example, 1 failure, 0 passed

还要注意您使用的是哪个rspec版本,您的测试报告看起来与我的不同。我的是v3.8版