> For the complete documentation index, see [llms.txt](https://ploegert.gitbook.io/til/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ploegert.gitbook.io/til/programmy/ruby/mock-method-chain-calls-with-rspec.md).

# 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)
