rspec/rspec-core — pull request #1026 by JonRowe (2013-08-02 12:23:11+00:00)
Title: All after hooks should be run even if the first one fails

We have a bunch of initialisation run before and after every spec which absloutely must be cleaned up. So naturally we put the cleanup in `after(:all)`.

Now, supposing you have a spec with an `after` block which is misbehaving:

describe "before and after callbacks" do
# in reality these are done in the rspec config
before(:all) do
puts "before all"
end
after(:all) do
puts "after all"
end

# in reality this is done in the specific spec
after(:all) do
puts "after all 2"
raise "oops, something broke"
end

it "does something" do
end
end

In this situation, rspec (2.14.4) hits the error in the the second `after(:all)` and then skips running the other one. Every subsequent spec then fails when their initialisation tries to initialise after not properly shutting down.

I think that the correct behaviour would be to attempt to run all `after` blocks even if the first one fails.