mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 15:18:01 +00:00
32 lines
703 B
Markdown
32 lines
703 B
Markdown
# Mock Method Chain Calls With RSpec
|
|
|
|
Generally with RSpec you mock one method call at a time:
|
|
|
|
```ruby
|
|
allow(User).to receive(:new).and_return(true)
|
|
```
|
|
|
|
Sometimes you are dealing with code that involves a chain of method calls.
|
|
|
|
```ruby
|
|
User
|
|
.new
|
|
.approve
|
|
.send_welcome_email
|
|
```
|
|
|
|
If it becomes unreasonable to mock out each individual method, you can instead
|
|
mock out the chain of calls.
|
|
|
|
```ruby
|
|
allow(User).to receive_message_chain('new.approve.send_welcome_email')
|
|
```
|
|
|
|
Alternatively, you can write this as:
|
|
|
|
```ruby
|
|
allow(User).to receive_message_chain(:new, :approve, :send_welcome_email)
|
|
```
|
|
|
|
[source](https://relishapp.com/rspec/rspec-mocks/docs/working-with-legacy-code/message-chains)
|