📖 Scenario: You are building a simple Rails application to manage a list of books. To keep your app reliable and easy to improve, you want to add tests that check your code works as expected.
🎯 Goal: Learn how to set up a basic test in Rails and understand why testing is important for your app's quality and stability.
📋 What You'll Learn
Create a Rails model called Book with attributes title and author
Add a test file for the Book model
Write a simple test to check that a Book can be created with valid attributes
Run the test to see it pass
💡 Why This Matters
🌍 Real World
Testing is a key part of building real Rails apps that work well and avoid bugs.
💼 Career
Rails developers are expected to write and maintain tests to ensure code quality and ease teamwork.
Progress0 / 4 steps
1
Create the Book model
Generate a Rails model called Book with string attributes title and author. Use the Rails generator command exactly as shown.
Ruby on Rails
Hint
Use the Rails command line tool to generate a model with the exact attribute names and types.
2
Add a test file for the Book model
Locate the test file test/models/book_test.rb created by Rails. Add a test method called test_valid_book inside the BookTest class. The method should be empty for now.
Ruby on Rails
Hint
Define a method starting with test_ inside the test class to create a test case.
3
Write a test to create a valid Book
Inside the test_valid_book method, create a new Book instance with title set to "Rails Guide" and author set to "DHH". Use assert to check that the book is valid.
Ruby on Rails
Hint
Use Book.new with the exact attributes and assert to check validity.
4
Run the test and confirm it passes
Run the Rails test command rails test in your terminal to execute the test suite. Confirm that the test for Book passes without errors.
Ruby on Rails
Hint
Use the terminal command rails test to run all tests and check results.
Practice
(1/5)
1. Why is testing considered an integral part of Rails development?
easy
A. It makes the app run faster in production.
B. It helps catch bugs early and ensures the app works as expected.
C. It automatically writes code for you.
D. It replaces the need for writing documentation.
Solution
Step 1: Understand the purpose of testing in Rails
Testing is used to verify that the app behaves correctly and to find bugs early.
Step 2: Evaluate the options based on Rails testing goals
Only It helps catch bugs early and ensures the app works as expected. correctly states that testing helps catch bugs early and ensures expected behavior.
Final Answer:
It helps catch bugs early and ensures the app works as expected. -> Option B
Quick Check:
Testing purpose = catch bugs early [OK]
Hint: Testing finds bugs early and confirms app behavior [OK]
Common Mistakes:
Thinking testing speeds up production
Believing testing writes code automatically
Confusing testing with documentation
2. Which of the following is the correct way to run all tests in a Rails application from the command line?
easy
A. rails start tests
B. rails run tests
C. rails execute tests
D. rails test
Solution
Step 1: Recall the Rails command to run tests
The standard command to run all tests in Rails is rails test.
Step 2: Check each option for correctness
Only rails test uses the correct Rails command syntax to run tests.
Final Answer:
rails test -> Option D
Quick Check:
Run tests command = rails test [OK]
Hint: Use 'rails test' to run all tests in Rails [OK]
Common Mistakes:
Using incorrect commands like 'rails run tests'
Confusing 'rails start' with test commands
Adding extra words to the command
3. Given this test code snippet in Rails:
test "should save user" do
user = User.new(name: "Alice")
assert user.save
end
What will happen if the user fails to save due to validation errors?
medium
A. The test will pass because the user object was created.
B. The test will be skipped automatically.
C. The test will fail because assert user.save expects true.
D. The test will raise a syntax error.
Solution
Step 1: Understand what assert user.save does
This line checks if user.save returns true, meaning the user saved successfully.
Step 2: Consider the case when save fails
If validations fail, user.save returns false, causing the assertion to fail and the test to fail.
Final Answer:
The test will fail because assert user.save expects true. -> Option C
Quick Check:
Failed save = test fails [OK]
Hint: assert expects true; false means test failure [OK]
Common Mistakes:
Assuming test passes if object exists
Thinking assertion causes syntax error
Believing tests skip on failure
4. You wrote this test in Rails:
test "should create post" do
post = Post.new(title: "Hello")
assert post.save
end
But the test always fails. What is the most likely reason?
medium
A. The database table for posts does not exist or is not migrated.
B. The Post model is missing required validations for title.
C. The test is missing require 'test_helper' at the top.
D. The test method name is incorrect.
Solution
Step 1: Analyze why post.save might fail
If the database table for posts is missing, saving will fail due to no storage.
Step 2: Check other options for likelihood
Missing migrations is a common cause of save failure; missing validations or test_helper usually cause different errors.
Final Answer:
The database table for posts does not exist or is not migrated. -> Option A
Quick Check:
Missing table = save fails [OK]
Hint: Check database migrations if save always fails [OK]
Common Mistakes:
Assuming missing validations cause save failure
Ignoring database migration status
Thinking test_helper absence causes save failure
5. In a Rails app, you want to ensure that every time a new user is created, a welcome email is sent. How can testing help you confirm this behavior reliably?
hard
A. Write a test that creates a user and checks if the welcome email was enqueued or sent.
B. Manually check the email inbox after creating a user in development.
C. Trust that Rails sends emails without testing.
D. Add a print statement in the mailer method and watch console output.
Solution
Step 1: Understand the goal of testing email sending
Tests should automatically verify that the welcome email is triggered when a user is created.
Step 2: Identify the reliable testing approach
Writing a test that creates a user and asserts the email was enqueued or sent is the correct automated way.
Final Answer:
Write a test that creates a user and checks if the welcome email was enqueued or sent. -> Option A
Quick Check:
Automated email test = reliable confirmation [OK]
Hint: Test email sending by asserting mail delivery in tests [OK]
Common Mistakes:
Relying on manual inbox checks
Assuming Rails sends emails without verification
Using print statements instead of tests
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.