mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 15:18:01 +00:00
40 lines
1.1 KiB
Markdown
40 lines
1.1 KiB
Markdown
# Avoid Double Negation With Minitest Refute
|
|
|
|
As I'm writing some tests for a recent feature, I end up with various test
|
|
cases that make a variety of assertions.
|
|
|
|
```ruby
|
|
assert_equal resp_body["id"], expected_id
|
|
|
|
# ...
|
|
|
|
assert_not resp_body["items"].empty?
|
|
```
|
|
|
|
The first assertion reads pretty naturally. The second one requires some extra
|
|
mental parsing because of the `_not` and then the "negative" check of
|
|
`#empty?`.
|
|
|
|
Another way to express this that might read more naturally is with
|
|
[`#refute`](https://ruby-doc.org/stdlib-3.0.2/libdoc/minitest/rdoc/Minitest/Assertions.html#method-i-refute).
|
|
|
|
```ruby
|
|
refute resp_body["items"].empty?
|
|
```
|
|
|
|
This says that we _refute_ that items is empty, so the assertion should fail if
|
|
empty.
|
|
|
|
Ruby is flexible in other ways. We may also prefer to write it as:
|
|
|
|
```ruby
|
|
assert resp_body["items"].present?
|
|
```
|
|
|
|
Or we could even take advantage of a more specific variant of refute with
|
|
[`#refute_empty`](https://ruby-doc.org/stdlib-3.0.2/libdoc/minitest/rdoc/Minitest/Assertions.html#method-i-refute_empty):
|
|
|
|
```ruby
|
|
refute_empty resp_body["items"]
|
|
```
|