Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fix confusing error message in `be_within`

This is a patch for the following issue:

rspec#92

It is possible to have duck typing for numerical operations, but the minus
sign is often used for other operations as well such as the set
difference that Array#- performs. In that case, even if it does not fail
on the :- method, it will probably fail on the subsequent :abs and :<=
calls.
  • Loading branch information...
commit 675115da39029770a353092194169e1119d7444e 1 parent 5626043
@zhangsu authored
View
3  lib/rspec/matchers/built_in/be_within.rb
@@ -14,6 +14,9 @@ def matches?(actual)
unless defined?(@expected)
raise ArgumentError.new("You must set an expected value using #of: be_within(#{delta}).of(expected_value)")
end
+ unless actual.is_a? Numeric
+ raise ArgumentError, "Expected a numeric value be within #{delta} of #{expected} but got #{actual.inspect}"
+ end
(super(actual) - expected).abs <= delta
end
View
4 spec/rspec/matchers/be_within_spec.rb
@@ -59,6 +59,10 @@ module Matchers
matcher = be_within(0.5)
expect { matcher.matches?(5.1) }.to raise_error(ArgumentError, /must set an expected value using #of/)
end
+
+ it "raises an error if the actual value is not numeric" do
+ expect { be_within(0.1).of(0).matches?(nil) }.to raise_error(ArgumentError, /Expected a numeric value be within/)
+ end
end
end
end
Please sign in to comment.
Something went wrong with that request. Please try again.