1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-02 22:58:01 +00:00
Files
til/rails/check-specific-attributes-on-activerecord-array.md

32 lines
1.1 KiB
Markdown

# Check Specific Attributes On ActiveRecord Array
If you're writing a test against a method that returns a collection of
ActiveRecord results, it can be tedious to check specific values for each.
There are certainly an endless number of ways to approach those assertions.
You can keep your assertion fairly concise by using nested RSpec matchers.
There are two in particular that can help with this kind of check:
```ruby
books = get_books_by("David Sedaris")
expect(books).to match_array(
[
have_attributes(
"title" => "Calypso",
"publication_year" => "2018",
),
have_attributes(
"title" => "Theft By Finding",
"publication_year" => "2017",
),
],
)
```
The outer part of the assertion is `match_array` which checks that the result
is an array of a certain size with specific elements. On its own we'd have to
spell out all the attributes of each book, including things like `created_at`
and `updated_at`. However, by combining it with `have_attributes` matchers, we
are able to make the assertion over a subset of each record's attributes.