1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-03 23:28:02 +00:00

Add Expect A Method To Be Called And Actually Call It as a ruby til

This commit is contained in:
jbranchaud
2019-07-29 14:30:16 -05:00
parent eefcb4f28c
commit ca5afbd0b3
2 changed files with 44 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 For a steady stream of TILs from a variety of rocketeers, checkout
[til.hashrocket.com](https://til.hashrocket.com/). [til.hashrocket.com](https://til.hashrocket.com/).
_827 TILs and counting..._ _828 TILs and counting..._
--- ---
@@ -637,6 +637,7 @@ _827 TILs and counting..._
- [Editing Code In Pry](ruby/editing-code-in-pry.md) - [Editing Code In Pry](ruby/editing-code-in-pry.md)
- [Encode A String As URL-Safe Base64](ruby/encode-a-string-as-url-safe-base64.md) - [Encode A String As URL-Safe Base64](ruby/encode-a-string-as-url-safe-base64.md)
- [Evaluating One-Off Commands](ruby/evaluating-one-off-commands.md) - [Evaluating One-Off Commands](ruby/evaluating-one-off-commands.md)
- [Expect A Method To Be Called And Actually Call It](ruby/expect-a-method-to-be-called-and-actually-call-it.md)
- [FactoryGirl Sequences](ruby/factory-girl-sequences.md) - [FactoryGirl Sequences](ruby/factory-girl-sequences.md)
- [Fail](ruby/fail.md) - [Fail](ruby/fail.md)
- [Finding The Source of Ruby Methods](ruby/finding-the-source-of-ruby-methods.md) - [Finding The Source of Ruby Methods](ruby/finding-the-source-of-ruby-methods.md)

View File

@@ -0,0 +1,42 @@
# Expect A Method To Be Called And Actually Call It
You can assert that a method is called without actually executing it. This is
often what `expect(...).to receive(:method_name)` is used for. If you do want
that method called, RSpec can accommodate you.
Let's say we have the following two classes:
```ruby
class Greeting
def self.say_hello
raise "Don't actually execute this"
puts "Hello"
end
end
class GreetingService
def self.run
Greeting.say_hello
end
end
```
We can assert that `say_hello` gets called without actually raising the
exception (first `it` block). If we tack on `and_call_original` then RSpec will
make the assertion and execute the method (second `it` block).
```ruby
describe "expect and call original" do
it "expect the message is received" do
expect(Greeting).to receive(:say_hello)
GreetingService.run
# passes
end
it "expect and call original" do
expect(Greeting).to receive(:say_hello).and_call_original
GreetingService.run
# fails, RuntimeError
end
end
```