1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-02 22:58:01 +00:00

Add Check Specific Attributes On ActiveRecord Array as a rails til

This commit is contained in:
jbranchaud
2019-10-18 14:34:32 -05:00
parent 1d118363b9
commit 984c4c2d40
2 changed files with 33 additions and 1 deletions

View File

@@ -10,7 +10,7 @@ smart people at [Hashrocket](http://hashrocket.com/).
For a steady stream of TILs from a variety of rocketeers, checkout
[til.hashrocket.com](https://til.hashrocket.com/).
_854 TILs and counting..._
_855 TILs and counting..._
---
@@ -500,6 +500,7 @@ _854 TILs and counting..._
- [Capybara Page Status Code](rails/capybara-page-status-code.md)
- [Cast Common Boolean-Like Values To Booleans](rails/cast-common-boolean-like-values-to-booleans.md)
- [Change The Nullability Of A Column](rails/change-the-nullability-of-a-column.md)
- [Check Specific Attributes On ActiveRecord Array](rails/check-specific-attributes-on-activerecord-array.md)
- [Code Statistics For An Application](rails/code-statistics-for-an-application.md)
- [Conditional Class Selectors in Haml](rails/conditional-class-selectors-in-haml.md)
- [Convert A Symbol To A Constant](rails/convert-a-symbol-to-a-constant.md)

View File

@@ -0,0 +1,31 @@
# 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.