diff --git a/Changelog.md b/Changelog.md index 51f83a4ee..49e807707 100644 --- a/Changelog.md +++ b/Changelog.md @@ -18,6 +18,8 @@ Bug fixes integers (Sam Phippen). * Fix `have` matcher to handle the fact that on ruby 2.0, `Enumerator#size` may return nil (Kenta Murata). +* Fix `expect { raise s }.to raise_error(s)` where s is an error instance + (Sam Phippen). ### 2.13.0 / 2013-02-23 [full changelog](http://github.com/rspec/rspec-expectations/compare/v2.12.1...v2.13.0) diff --git a/lib/rspec/matchers/built_in/raise_error.rb b/lib/rspec/matchers/built_in/raise_error.rb index 03f398295..c1fcc3ba1 100644 --- a/lib/rspec/matchers/built_in/raise_error.rb +++ b/lib/rspec/matchers/built_in/raise_error.rb @@ -20,7 +20,7 @@ def matches?(given_proc, negative_expectation = false) @eval_block_passed = false begin given_proc.call - rescue @expected_error => @actual_error + rescue expected_error_class => @actual_error @raised_expected_error = true @with_expected_message = verify_message rescue Exception => @actual_error @@ -76,6 +76,10 @@ def description private + def expected_error_class + (@expected_error.is_a? Class) ? @expected_error : @expected_error.class + end + def expected_error case @expected_message when nil diff --git a/spec/rspec/matchers/raise_error_spec.rb b/spec/rspec/matchers/raise_error_spec.rb index 8b1984d3e..3669f2a8c 100644 --- a/spec/rspec/matchers/raise_error_spec.rb +++ b/spec/rspec/matchers/raise_error_spec.rb @@ -10,6 +10,11 @@ expect {raise}.to raise_error end + it "passes if an error instance is expected" do + s = StandardError.new + expect {raise s}.to raise_error(s) + end + it "fails if nothing is raised" do expect { expect {}.to raise_error