Bird
Raised Fist0
Rubyprogramming~5 mins

Mocking and stubbing in Ruby - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is mocking in Ruby testing?
Mocking is creating fake objects that simulate real objects' behavior to test interactions without using the real objects.
Click to reveal answer
beginner
What does stubbing mean in Ruby tests?
Stubbing means replacing a method with a fake one that returns a specific value, so the test does not depend on the real method's behavior.
Click to reveal answer
beginner
How do you create a stub for a method in RSpec?
Use allow(object).to receive(:method).and_return(value) to make the method return the value during tests.
Click to reveal answer
intermediate
What is the difference between a mock and a stub?
A stub provides canned responses to method calls, while a mock also verifies that certain methods were called with expected arguments.
Click to reveal answer
beginner
Why use mocking and stubbing in tests?
They isolate the code being tested by replacing dependencies, making tests faster, more reliable, and focused on specific behavior.
Click to reveal answer
Which RSpec method is used to stub a method?
Amock(object).method
Ballow(object).to receive(:method).and_return(value)
Cexpect(object).to receive(:method)
Dstub(object).method
What does a mock object do besides stubbing methods?
AVerifies that methods are called with expected arguments
BRuns the real method implementation
CDeletes the original object
DAutomatically fixes bugs
Why is stubbing useful in tests?
ATo replace slow or unreliable methods with fixed return values
BTo make tests run slower
CTo delete code
DTo create real database records
Which of these is NOT a benefit of mocking and stubbing?
AIsolating the code under test
BControlling test environment
CSpeeding up tests
DMaking tests dependent on external services
In RSpec, how do you check that a method was called on a mock?
Aobject.method
Ballow(object).to receive(:method)
Cexpect(object).to receive(:method)
Dstub(object).method
Explain in your own words what mocking and stubbing are and why they are useful in Ruby testing.
Think about how you can replace parts of your code to test only what you want.
You got /4 concepts.
    Describe how you would stub a method in RSpec and how you would verify a method call using a mock.
    Remember the keywords 'allow' and 'expect' in RSpec.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of stubbing in Ruby testing?
      easy
      A. To check if a method was called with specific arguments
      B. To slow down tests by adding delays
      C. To run the actual method code during tests
      D. To replace a method's return value with a fake one

      Solution

      1. Step 1: Understand stubbing concept

        Stubbing means replacing a method's output with a fake value to control test behavior.
      2. Step 2: Differentiate from mocking

        Mocking checks method calls, but stubbing focuses on return values.
      3. Final Answer:

        To replace a method's return value with a fake one -> Option D
      4. Quick Check:

        Stubbing = fake return value [OK]
      Hint: Stubs fake returns; mocks check calls [OK]
      Common Mistakes:
      • Confusing stubs with mocks
      • Thinking stubs run real code
      • Believing stubs slow tests
      2. Which of the following is the correct syntax to stub a method foo on an object obj to return 42 using RSpec?
      easy
      A. allow(obj).to receive(:foo).and_return(42)
      B. expect(obj).to stub(:foo).and_return(42)
      C. obj.stub(:foo).returns(42)
      D. mock(obj).expects(:foo).returns(42)

      Solution

      1. Step 1: Recall RSpec stubbing syntax

        In RSpec, stubbing uses allow(object).to receive(:method).and_return(value).
      2. Step 2: Check each option

        allow(obj).to receive(:foo).and_return(42) matches correct syntax; others use outdated or incorrect methods.
      3. Final Answer:

        allow(obj).to receive(:foo).and_return(42) -> Option A
      4. Quick Check:

        RSpec stub = allow + receive + and_return [OK]
      Hint: Use allow(obj).to receive(:method).and_return(value) [OK]
      Common Mistakes:
      • Using deprecated stub syntax
      • Confusing expect with allow for stubs
      • Using mock instead of allow for stubs
      3. What will be the output of this Ruby code using RSpec mocks?
      class Calculator
        def add(a, b)
          a + b
        end
      end
      
      calc = Calculator.new
      allow(calc).to receive(:add).with(2, 3).and_return(10)
      puts calc.add(2, 3)
      puts calc.add(4, 5)
      medium
      A. 10 10
      B. 10 9
      C. 5 9
      D. 5 5

      Solution

      1. Step 1: Analyze stubbed method call

        The method add is stubbed to return 10 only when called with arguments 2 and 3.
      2. Step 2: Check calls and outputs

        First call calc.add(2, 3) returns 10 due to stub. Second call calc.add(4, 5) is not stubbed, so runs original method returning 9.
      3. Final Answer:

        10 9 -> Option B
      4. Quick Check:

        Stubbed args return 10; others run real method [OK]
      Hint: Stub affects only specified arguments [OK]
      Common Mistakes:
      • Assuming all calls return stub value
      • Ignoring method arguments in stub
      • Expecting syntax error
      4. Identify the error in this RSpec mocking code:
      user = double('User')
      expect(user).to receive(:login).with('admin')
      user.login('guest')
      medium
      A. Missing stub for login method
      B. The double is not created correctly
      C. The method login is called with wrong argument
      D. No error, code is correct

      Solution

      1. Step 1: Understand the expectation

        The test expects login to be called with argument 'admin'.
      2. Step 2: Check actual method call

        The method is called with 'guest', which does not match the expectation.
      3. Final Answer:

        The method login is called with wrong argument -> Option C
      4. Quick Check:

        Expect argument mismatch causes failure [OK]
      Hint: Match expected arguments exactly in mocks [OK]
      Common Mistakes:
      • Calling method with different arguments
      • Confusing stub and expect syntax
      • Ignoring error raised by RSpec
      5. You want to test a method that calls an external API method fetch_data on a Service object. How can you use mocking and stubbing together to test your method without calling the real API?
      hard
      A. Stub fetch_data to return fake data and mock to check it was called once
      B. Call the real fetch_data method and ignore mocking
      C. Mock fetch_data without stubbing its return value
      D. Do not use mocking or stubbing; test with real API

      Solution

      1. Step 1: Stub the API call to avoid real network

        Stub fetch_data to return controlled fake data, so tests run fast and reliably.
      2. Step 2: Mock to verify the method call

        Use mock to check fetch_data was called exactly once, ensuring your method triggers it.
      3. Final Answer:

        Stub fetch_data to return fake data and mock to check it was called once -> Option A
      4. Quick Check:

        Stub return + mock call count = test isolation [OK]
      Hint: Stub return and mock call count together [OK]
      Common Mistakes:
      • Calling real API in tests
      • Mocking without stubbing return value
      • Ignoring call verification
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard