mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 07:08:01 +00:00
Add Check Specific Arguments To Received Method as an RSpec til
This commit is contained in:
@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
|
|||||||
|
|
||||||
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
||||||
|
|
||||||
_1156 TILs and counting..._
|
_1157 TILs and counting..._
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -47,6 +47,7 @@ _1156 TILs and counting..._
|
|||||||
* [React Native](#react-native)
|
* [React Native](#react-native)
|
||||||
* [React Testing Library](#react-testing-library)
|
* [React Testing Library](#react-testing-library)
|
||||||
* [ReasonML](#reasonml)
|
* [ReasonML](#reasonml)
|
||||||
|
* [RSpec](#rspec)
|
||||||
* [Ruby](#ruby)
|
* [Ruby](#ruby)
|
||||||
* [sed](#sed)
|
* [sed](#sed)
|
||||||
* [Shell](#shell)
|
* [Shell](#shell)
|
||||||
@@ -870,6 +871,10 @@ _1156 TILs and counting..._
|
|||||||
- [Using Optional Labeled Function Arguments](reason/using-optional-labeled-function-arguments.md)
|
- [Using Optional Labeled Function Arguments](reason/using-optional-labeled-function-arguments.md)
|
||||||
- [Wrapping A Component For Use In JavaScript](reason/wrapping-a-component-for-use-in-javascript.md)
|
- [Wrapping A Component For Use In JavaScript](reason/wrapping-a-component-for-use-in-javascript.md)
|
||||||
|
|
||||||
|
### RSpec
|
||||||
|
|
||||||
|
- [Check Specific Arguments To Received Method](rspec/check-specific-arguments-to-received-method.md)
|
||||||
|
|
||||||
### Ruby
|
### Ruby
|
||||||
|
|
||||||
- [A Basic Case Statement](ruby/a-basic-case-statement.md)
|
- [A Basic Case Statement](ruby/a-basic-case-statement.md)
|
||||||
|
|||||||
40
rspec/check-specific-arguments-to-received-method.md
Normal file
40
rspec/check-specific-arguments-to-received-method.md
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# Check Specific Arguments To Received Method
|
||||||
|
|
||||||
|
Let's say we have a method receiving a big hash of arguments. A hash like this:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
{
|
||||||
|
name: 'Taco Tray',
|
||||||
|
product_id: 'taco123',
|
||||||
|
price: 4500,
|
||||||
|
description: 'A big tray of tacos',
|
||||||
|
discounts: {
|
||||||
|
coupon: 'DISCOUNT_TACOS'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
In an RSpec test we want to check one of those hash values in a certain
|
||||||
|
scenario. It can be tedious to type out and check the entire hash. Instead, we
|
||||||
|
want the test to surgically check just one part of the hash.
|
||||||
|
|
||||||
|
We can do this with RSpec's dynamic matcher syntax. The [`hash_including`
|
||||||
|
argument
|
||||||
|
matcher](https://rspec.info/documentation/3.4/rspec-mocks/RSpec/Mocks/ArgumentMatchers.html#hash_including-instance_method)
|
||||||
|
can be nested within the `#with` part of `expect().to receive().with()`.
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
expect(TacoTruck)
|
||||||
|
.to receive(:take_order)
|
||||||
|
.with(
|
||||||
|
hash_including(
|
||||||
|
discounts: { coupon: 'DISCOUNT_TACOS'}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
This will assert about the `discounts` portion of the hash that `#take_order`
|
||||||
|
gets called with. The rest of the hash will be ignored.
|
||||||
|
|
||||||
|
Without `hash_including`, the `with` call would result in a failure when trying
|
||||||
|
to match against the entire hash.
|
||||||
Reference in New Issue
Block a user