mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 07:08:01 +00:00
1.1 KiB
1.1 KiB
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:
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).
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