Bird
Raised Fist0
Rubyprogramming~5 mins

RSpec expectations and matchers in Ruby - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of expect() in RSpec?

expect() is used to define an expectation in RSpec. It wraps the actual value you want to test, so you can check if it meets certain conditions using matchers.

Click to reveal answer
beginner
What does the matcher eq check for in RSpec?

The eq matcher checks if the actual value is equal to the expected value using Ruby's == operator.

Click to reveal answer
intermediate
How do you test if a method raises an error using RSpec?

You use expect { ... }.to raise_error(ErrorClass). The block contains the code that should raise the error, and raise_error matcher checks for it.

Click to reveal answer
intermediate
What is the difference between eq and eql matchers?

eq checks for value equality (==), while eql checks for both value and type equality (eql? method).

Click to reveal answer
beginner
How can you check if an array includes a specific element in RSpec?

Use expect(array).to include(element). The include matcher tests if the element is present in the array.

Click to reveal answer
Which RSpec matcher checks if two values are exactly the same object?
Aeq
Beql
Cequal
Dinclude
How do you write an expectation that a method call changes a value by 1?
Aexpect(value).to change.by(1)
Bexpect(method_call).to eq(1)
Cexpect { method_call }.to raise_error(1)
Dexpect { method_call }.to change { value }.by(1)
What does expect(value).not_to eq(5) mean?
AValue should not be equal to 5
BValue should be equal to 5
CValue should raise an error 5 times
DValue should include 5
Which matcher would you use to check if a string matches a pattern?
Amatch
Binclude
Ceq
Draise_error
How do you test if a block of code raises any error in RSpec?
Aexpect(code).to raise_error
Bexpect { code }.to raise_error
Cexpect { code }.to eq(error)
Dexpect(code).to eq(error)
Explain how to use RSpec expectations and matchers to test if a method returns the expected value.
Think about wrapping the method call with expect and using a matcher to compare.
You got /4 concepts.
    Describe how to test error handling in RSpec using expectations and matchers.
    Remember that error testing uses a block inside expect.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does the RSpec matcher expect(value).to eq(5) check for?
      easy
      A. It checks if value is less than 5.
      B. It checks if value is greater than 5.
      C. It checks if value is not equal to 5.
      D. It checks if value is equal to 5.

      Solution

      1. Step 1: Understand the eq matcher

        The eq matcher tests for equality between the expected and actual values.
      2. Step 2: Analyze the expectation

        expect(value).to eq(5) means the test expects value to be exactly 5.
      3. Final Answer:

        It checks if value is equal to 5. -> Option D
      4. Quick Check:

        eq matcher = equality check [OK]
      Hint: Remember eq means exact equality check [OK]
      Common Mistakes:
      • Confusing eq with greater_than or less_than
      • Thinking eq checks for inequality
      • Mixing up expect().to and expect().not_to
      2. Which of the following is the correct syntax to check that an array includes the number 3 in RSpec?
      easy
      A. expect(array).to has(3)
      B. expect(array).to include(3)
      C. expect(array).to contains(3)
      D. expect(array).to has_key(3)

      Solution

      1. Step 1: Identify the correct matcher for inclusion

        The include matcher checks if a collection contains a specific element.
      2. Step 2: Match syntax with RSpec standards

        expect(array).to include(3) is the correct syntax to check if 3 is in the array.
      3. Final Answer:

        expect(array).to include(3) -> Option B
      4. Quick Check:

        include matcher = check element presence [OK]
      Hint: Use include to check if collection has an element [OK]
      Common Mistakes:
      • Using has or contains which are not valid RSpec matchers
      • Using has_key which is for hashes, not arrays
      • Forgetting to use expect().to syntax
      3. What will be the output of this RSpec test snippet?
      describe 'Number test' do
        it 'checks if number is odd' do
          number = 7
          expect(number.odd?).to be true
        end
      end
      medium
      A. The test passes because 7 is odd.
      B. The test fails because 7 is not odd.
      C. SyntaxError due to incorrect matcher usage.
      D. The test passes but warns about deprecated syntax.

      Solution

      1. Step 1: Understand the code logic

        The variable number is set to 7, which is an odd number.
      2. Step 2: Analyze the expectation

        expect(number.odd?).to be true checks if number.odd? returns true, which it does for 7.
      3. Final Answer:

        The test passes because 7 is odd. -> Option A
      4. Quick Check:

        odd? returns true for odd numbers [OK]
      Hint: odd? returns true for odd numbers, expect that [OK]
      Common Mistakes:
      • Assuming 7 is even
      • Confusing be true with eq true
      • Thinking syntax is wrong here
      4. Identify the error in this RSpec expectation:
      expect(user.name).to eq nil
      medium
      A. Should use not_to eq nil to check for nil.
      B. Missing parentheses around eq(nil).
      C. Should use be_nil matcher instead of eq nil.
      D. No error; the syntax is correct.

      Solution

      1. Step 1: Understand nil checking in RSpec

        While eq nil works, the preferred matcher for nil is be_nil for clarity and style.
      2. Step 2: Identify best practice

        Using expect(user.name).to be_nil is clearer and idiomatic in RSpec.
      3. Final Answer:

        Should use be_nil matcher instead of eq nil. -> Option C
      4. Quick Check:

        Use be_nil for nil checks [OK]
      Hint: Use be_nil matcher for nil checks, not eq nil [OK]
      Common Mistakes:
      • Thinking eq nil is a syntax error
      • Adding unnecessary parentheses
      • Using not_to eq nil to check for nil
      5. You want to test that a method calculate returns a value greater than 10 but less than 20. Which RSpec expectation correctly checks this?
      hard
      A. expect(calculate).to satisfy { |v| v > 10 && v < 20 }
      B. expect(calculate).to be > 10 and be < 20
      C. expect(calculate).to be_between(10, 20).exclusive
      D. expect(calculate).to be_between(11, 19).inclusive

      Solution

      1. Step 1: Understand the range requirement

        The value must be greater than 10 and less than 20, excluding 10 and 20 themselves.
      2. Step 2: Analyze each option

        expect(calculate).to be > 10 and be < 20: expect(calculate).to be > 10 and be < 20 is invalid syntax; correct chaining uses (be > 10).and(be < 20).
        Options C and D: be_between is not a built-in RSpec matcher.
        expect(calculate).to satisfy { |v| v > 10 && v < 20 }: expect(calculate).to satisfy { |v| v > 10 && v < 20 } correctly checks the condition using a standard flexible matcher.
      3. Step 3: Choose the best matcher

        expect(calculate).to satisfy { |v| v > 10 && v < 20 } is the correct and explicit choice using standard RSpec.
      4. Final Answer:

        expect(calculate).to satisfy { |v| v > 10 && v < 20 } -> Option A
      5. Quick Check:

        satisfy matcher = custom condition check [OK]
      Hint: Use satisfy with block for complex conditions [OK]
      Common Mistakes:
      • Using non-standard be_between matcher
      • Trying to chain matchers with 'and' incorrectly
      • Ignoring boundary conditions in range checks
      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