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:
@@ -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)
|
||||
|
||||
31
rails/check-specific-attributes-on-activerecord-array.md
Normal file
31
rails/check-specific-attributes-on-activerecord-array.md
Normal 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.
|
||||
Reference in New Issue
Block a user