在rspec测试中实现前/后条件的更好方法

时间:2011-07-05 11:58:24

标签: ruby testing rspec metaprogramming aop

关于OOP + AOP方法(我熟悉)和rspec方法(对我来说不太熟悉)。这是我典型测试的代码。代码驻留在每个测试文件中(其中有很多):

describe "Testing... " do

before(:each) do
  assert_no_application_errors
end

after(:each) do
  assert_no_application_errors
end

it "Test1" do
  begin
    ...
  rescue => e
    puts e, e.backtrace
    print_log
    raise
  end
end # it

...

end # describe
  1. 如您所见,before(:each)after(:each)在每个测试文件中都是相同的。所以,问题是我是否可以将它们写在一个适合所有测试文件的地方。

  2. 如果可以使用N1 - 如果在某个文件中需要在before(:each)after(:each)中应用其他步骤会怎样?新声明是否会取代或增强以前的声明?

  3. rescue部分在其他文件中的同一文件中的每个测试中也相同。将它放在一个地方的正确方法是什么?

  4. 关于如何正确行事的任何其他相关建议将受到欢迎。

  5. 谢谢!

1 个答案:

答案 0 :(得分:1)

如果您希望每次测试都触发这些断言,那么您应该配置全局“around”回调:

RSpec.configure do |config|
  config.around do
    assert_no_application_errors
  end
end

只需将其添加到spec / spec_helper.rb中,并在每个规范文件中都需要。

有关“around”钩子的更多信息,请阅读:http://relishapp.com/rspec/rspec-core/v/2-6/dir/hooks/around-hooks