RSpec uses describe and it blocks to organize and run tests. They help you check if your code works as expected.
When you want to group related tests for a class or method.
When you want to explain what a piece of code should do in simple terms.
When you want to write small, clear tests that show expected behavior.
When you want to run automated checks to catch mistakes early.
Syntax
Ruby
describe 'Some feature or class'do
it 'does something expected'do# test code hereendend
describe groups tests and usually names the feature or class.
it defines a single test example describing expected behavior.
Examples
This tests that adding 2 and 3 equals 5.
Ruby
describe 'Calculator'do
it 'adds two numbers'do
expect(2 + 3).to eq(5)
endend
This checks that a new array starts empty.
Ruby
describe Array do
it 'is empty when created'do
expect(Array.new).to be_empty
endend
Sample Program
This program tests two things about the String 'hello': reversing it and checking its length.
Ruby
require'rspec'
describe 'String'do
it 'reverses correctly'do
expect('hello'.reverse).to eq('olleh')
end
it 'has correct length'do
expect('hello'.length).to eq(5)
endend
OutputSuccess
Important Notes
Use describe to group tests logically, like chapters in a book.
Use it to write small, clear tests that explain what your code should do.
RSpec output shows which tests passed or failed, helping you find problems fast.
Summary
describe groups related tests.
it defines individual test cases.
Together, they make your tests clear and organized.
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.