📖 Scenario: You are writing tests for a simple Ruby method that adds two numbers. Testing helps you check if your code works as expected before using it in real projects.
🎯 Goal: You will create an RSpec test file using describe and it blocks to organize and run tests for the addition method.
📋 What You'll Learn
Create a describe block for the add method
Inside describe, write an it block describing the expected behavior
Use expect with eq matcher to check the result of add(2, 3)
Print the test result by running the RSpec test file
💡 Why This Matters
🌍 Real World
Writing tests helps catch bugs early and ensures your code works as expected before sharing or deploying it.
💼 Career
RSpec is widely used in Ruby development jobs to write automated tests, improving code quality and reliability.
Progress0 / 4 steps
1
Create the add method
Write a Ruby method called add that takes two parameters a and b and returns their sum.
Ruby
Hint
Define a method with def add(a, b) and return a + b.
2
Add a describe block for the add method
Write an RSpec describe block for the add method. Use describe 'add' to start the block.
Ruby
Hint
Use RSpec.describe 'add' do to start the test block and end to close it.
3
Add an it block with an expectation
Inside the describe 'add' block, write an it block with description 'adds two numbers'. Inside it, use expect(add(2, 3)).to eq(5) to test the method.
Ruby
Hint
Use it 'adds two numbers' do and inside it write expect(add(2, 3)).to eq(5).
4
Run the RSpec test and print the result
Run the RSpec test file and print the output to show the test passed. Use system('rspec filename.rb') replacing filename.rb with your test file name.
Ruby
Hint
Run rspec command on your test file and print the output.
Practice
(1/5)
1. What is the main purpose of the describe block in RSpec?
easy
A. To set up test data before tests run
B. To define a single test case
C. To run the tests automatically
D. To group related test cases together
Solution
Step 1: Understand the role of describe
The describe block is used to group related tests, making the test suite organized.
Step 2: Differentiate from it block
The it block defines individual test cases, not grouping.
Final Answer:
To group related test cases together -> Option D
Quick Check:
describe groups tests = D [OK]
Hint: Remember: describe groups, it tests one thing [OK]
Common Mistakes:
Confusing describe with it
Thinking describe runs tests
Assuming describe sets up data
2. Which of the following is the correct syntax to define a test case inside a describe block in RSpec?
easy
A. describe 'Calculator' do it 'adds numbers' { expect(1 + 1).to eq(2) end
B. describe 'Calculator' do
it 'adds numbers' do
expect(1 + 1).to eq(2)
end
end
C. describe 'Calculator' do it 'adds numbers' do expect(1 + 1).to eq(2) end
D. describe 'Calculator' do
test 'adds numbers' do
expect(1 + 1).to eq(2)
end
end
Solution
Step 1: Check Ruby block syntax
RSpec uses do ... end blocks for describe and it. Curly braces are less common for multi-line blocks.
Step 2: Verify correct keywords
it defines test cases, not test. describe 'Calculator' do
test 'adds numbers' do
expect(1 + 1).to eq(2)
end
end uses wrong keyword.
Final Answer:
describe 'Calculator' do
it 'adds numbers' do
expect(1 + 1).to eq(2)
end
end -> Option B
Quick Check:
Correct Ruby block syntax = A [OK]
Hint: Use do...end for multi-line it blocks [OK]
Common Mistakes:
Using curly braces for multi-line blocks
Using wrong keyword like test instead of it
Missing do or end keywords
3. What will be the output when running this RSpec test?
describe 'Math' do
it 'checks addition' do
expect(2 + 2).to eq(4)
end
it 'checks subtraction' do
expect(5 - 3).to eq(1)
end
end
medium
A. 1 test passed, 1 test failed
B. 2 tests passed
C. 2 tests failed
D. Syntax error
Solution
Step 1: Evaluate first test case
expect(2 + 2).to eq(4) is true, so first test passes.
Step 2: Evaluate second test case
expect(5 - 3).to eq(1) is false because 5 - 3 equals 2, not 1, so second test fails.
Final Answer:
1 test passed, 1 test failed -> Option A
Quick Check:
2+2=4 (pass), 5-3=2≠1 (fail) = B [OK]
Hint: Check math inside expect carefully [OK]
Common Mistakes:
Assuming both tests pass without checking math
Confusing expected and actual values
Ignoring test failure details
4. Identify the error in this RSpec test code:
describe 'String' do
it 'checks length' do
expect('hello'.length).to eq 5
end
end
medium
A. Syntax error due to missing do keyword
B. Incorrect use of describe block
C. No error, code is correct
D. Missing parentheses in expect call
Solution
Step 1: Check syntax of expect
The syntax expect('hello'.length).to eq 5 is valid in Ruby; parentheses are optional here.
Step 2: Verify describe and it blocks
Both describe and it blocks have correct do ... end syntax.
Final Answer:
No error, code is correct -> Option C
Quick Check:
Code syntax valid = A [OK]
Hint: Parentheses optional in expect calls [OK]
Common Mistakes:
Thinking parentheses are mandatory
Confusing describe and it syntax
Assuming missing do keyword
5. You want to test a method greet(name) that returns "Hello, <name>!". How do you organize your RSpec test using describe and it blocks for clarity and good practice?
hard
A. describe 'greet method' do
it 'returns greeting with given name' do
expect(greet('Alice')).to eq('Hello, Alice!')
end
end
B. it 'returns greeting with given name' do
expect(greet('Alice')).to eq('Hello, Alice!')
end
C. describe 'greet method' do
expect(greet('Alice')).to eq('Hello, Alice!')
end
D. describe 'greet method' do
it 'returns greeting with given name' { expect(greet('Alice')).to eq('Hello, Alice!') end
Solution
Step 1: Use describe to group tests
The describe block groups related tests for the greet method.
Step 2: Use it for individual test cases
The it block defines specific test cases. Expect statements directly in describe or standalone it lack proper structure.
Step 3: Prefer do...end for readability
Use do ... end for multi-line blocks over { ... }.
Final Answer:
describe 'greet method' do
it 'returns greeting with given name' do
expect(greet('Alice')).to eq('Hello, Alice!')
end
end -> Option A
Quick Check:
describe groups, it tests, do...end blocks = C [OK]
Hint: Use describe for grouping, it for each test [OK]
Common Mistakes:
Skipping describe block
Writing expect outside it block
Using curly braces for multi-line it block
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.