Skip to content

Commit 9039716

Browse files
committed
Improve message from refute on failure
The previous implementation was to `assert(!value)` which led to confusing failure messages when using `refute` directly. For custom failure messages, `!value` is always `false` on failure, so `false` is passed to the custom message block where the caller might instead expect the value that caused the failure. Similarly, the default failure message is always "expected false to be truthy" when really the expectation is that something truthy is falsy.
1 parent f1175c5 commit 9039716

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

lib/quickdraw/test.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,16 @@ def assert(value)
4949
nil
5050
end
5151

52-
def refute(value, ...)
53-
assert(!value, ...)
52+
def refute(value)
53+
if !value
54+
success!
55+
elsif block_given?
56+
failure! { yield(value) }
57+
else
58+
failure! { "expected #{value.inspect} to be falsy" }
59+
end
60+
61+
nil
5462
end
5563

5664
# Indicate that an assertion passed successfully.

test/quickdraw.test.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,17 @@
1515
test "refute", skip: true do
1616
refute true
1717
end
18+
19+
test "refute custom message" do
20+
runner = assert_test(failures: 1) do
21+
refute(32) { |val| "#{val} not falsy" }
22+
end
23+
assert_equal runner.failures.last["message"], "32 not falsy"
24+
end
25+
26+
test "refute default message" do
27+
runner = assert_test(failures: 1) do
28+
refute 32
29+
end
30+
assert_equal runner.failures.last["message"], "expected 32 to be falsy"
31+
end

0 commit comments

Comments
 (0)