Bird
Raised Fist0
Ruby on Railsframework~10 mins

Integration tests in Ruby on Rails - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to define an integration test class inheriting from the correct base class.

Ruby on Rails
class UsersLoginTest < [1]
  # test code here
end
Drag options to blanks, or click blank then click option'
AActionDispatch::IntegrationTest
BActiveSupport::TestCase
CApplicationRecord
DActionController::Base
Attempts:
3 left
💡 Hint
Common Mistakes
Using ActiveSupport::TestCase instead of ActionDispatch::IntegrationTest
Confusing controller tests with integration tests
2fill in blank
medium

Complete the code to simulate a GET request to the login path in an integration test.

Ruby on Rails
get [1]
Drag options to blanks, or click blank then click option'
Ausers_path
Blogin_path
Csignup_path
Droot_path
Attempts:
3 left
💡 Hint
Common Mistakes
Using users_path which is for user index
Using root_path which is the home page
3fill in blank
hard

Fix the error in the assertion to check if the login form is present in the response body.

Ruby on Rails
assert_select "form[action=?]", [1]
Drag options to blanks, or click blank then click option'
Asignup_path
Blogout_path
Clogin_path
Dusers_path
Attempts:
3 left
💡 Hint
Common Mistakes
Using logout_path which is for logging out
Using signup_path which is for new user registration
4fill in blank
hard

Fill both blanks to simulate a POST login request with email and password parameters.

Ruby on Rails
post login_path, params: { session: { email: [1], password: [2] } }
Drag options to blanks, or click blank then click option'
A"user@example.com"
B"password"
C"wrongpass"
D"admin@example.com"
Attempts:
3 left
💡 Hint
Common Mistakes
Using symbols instead of strings for email and password
Mixing up email and password values
5fill in blank
hard

Fill both blanks to check that after login, the user is redirected to the profile page and the flash message is not empty.

Ruby on Rails
assert_redirected_to [1]
follow_redirect!
assert_template [2]
assert_not flash.empty?
Drag options to blanks, or click blank then click option'
Auser_path(@user)
B:users/show
C:users/profile
Droot_path
Attempts:
3 left
💡 Hint
Common Mistakes
Using root_path instead of user_path(@user)
Using :users/profile which is not a standard template name

Practice

(1/5)
1. What is the main purpose of integration tests in a Rails application?
easy
A. To test individual methods in models
B. To test only the views without backend logic
C. To check database schema correctness
D. To check how different parts of the app work together from a user's perspective

Solution

  1. Step 1: Understand integration test scope

    Integration tests simulate user actions and check multiple parts working together.
  2. Step 2: Compare options with integration test purpose

    Only To check how different parts of the app work together from a user's perspective describes testing how parts work together from a user's view.
  3. Final Answer:

    To check how different parts of the app work together from a user's perspective -> Option D
  4. Quick Check:

    Integration tests = user perspective checks [OK]
Hint: Integration tests simulate user actions across components [OK]
Common Mistakes:
  • Confusing integration tests with unit tests
  • Thinking integration tests only check views
  • Assuming integration tests test database schema
2. Which of the following is the correct way to start an integration test class in Rails?
easy
A. class UserFlowsTest < ApplicationController
B. class UserFlowsTest < ActionDispatch::IntegrationTest
C. class UserFlowsTest < ActiveRecord::Base
D. class UserFlowsTest < ActionController::TestCase

Solution

  1. Step 1: Identify the base class for integration tests

    Rails integration tests inherit from ActionDispatch::IntegrationTest.
  2. Step 2: Check each option's base class

    Only class UserFlowsTest < ActionDispatch::IntegrationTest inherits from ActionDispatch::IntegrationTest, others are for models or controllers.
  3. Final Answer:

    class UserFlowsTest < ActionDispatch::IntegrationTest -> Option B
  4. Quick Check:

    Integration test class inherits ActionDispatch::IntegrationTest [OK]
Hint: Integration tests inherit from ActionDispatch::IntegrationTest [OK]
Common Mistakes:
  • Using ActiveRecord::Base which is for models
  • Using ApplicationController which is for controllers
  • Using ActionController::TestCase which is for controller tests
3. Given this integration test code snippet:
test "visit home page" do
  get root_path
  assert_response :success
  assert_select "h1", "Welcome"
end

What does assert_select "h1", "Welcome" check?
medium
A. That the page contains an <h1> tag with text exactly 'Welcome'
B. That the page has any <h1> tag regardless of text
C. That the response status is 404
D. That the page redirects to another URL

Solution

  1. Step 1: Understand assert_select usage

    assert_select checks HTML elements and their content in the response body.
  2. Step 2: Analyze the parameters "h1" and "Welcome"

    It looks for an <h1> tag with text exactly matching "Welcome".
  3. Final Answer:

    That the page contains an <h1> tag with text exactly 'Welcome' -> Option A
  4. Quick Check:

    assert_select checks HTML element and text [OK]
Hint: assert_select checks HTML tags and their content [OK]
Common Mistakes:
  • Thinking assert_select only checks tag presence without text
  • Confusing assert_response with assert_select
  • Assuming assert_select checks redirects
4. Identify the error in this integration test code:
test "create user" do
  post users_path, params: { user: { name: "Alice" } }
  assert_redirected_to user_path(@user)
end
medium
A. params hash syntax is invalid
B. Missing get request before post
C. Using @user without defining or assigning it in the test
D. Incorrect HTTP verb; should use get instead of post

Solution

  1. Step 1: Check variable usage in assertion

    The test asserts redirect to user_path(@user), but @user is never set.
  2. Step 2: Understand how to get created user

    After post, the created user should be fetched from controller or database, not assumed as @user.
  3. Final Answer:

    Using @user without defining or assigning it in the test -> Option C
  4. Quick Check:

    Undefined @user causes error in redirect assertion [OK]
Hint: Define variables before using in assertions [OK]
Common Mistakes:
  • Assuming @user is auto-set after post
  • Confusing HTTP verbs for create actions
  • Incorrect params hash structure
5. You want to write an integration test that submits a login form and then checks if the user is redirected to their dashboard page. Which sequence of methods correctly simulates this flow?
hard
A. post login_path, params: { session: { email: "user@example.com", password: "secret" } } followed by assert_redirected_to dashboard_path
B. get login_path followed by assert_response :success and then get dashboard_path
C. assert_redirected_to login_path followed by post dashboard_path
D. post dashboard_path with user params followed by assert_response :redirect

Solution

  1. Step 1: Identify correct HTTP verb for form submission

    Login forms usually submit with POST, so use post with params.
  2. Step 2: Check correct assertion after login

    After successful login, user should be redirected to dashboard, so assert_redirected_to dashboard_path is correct.
  3. Final Answer:

    post login_path, params: { session: { email: "user@example.com", password: "secret" } } followed by assert_redirected_to dashboard_path -> Option A
  4. Quick Check:

    POST login + assert redirect to dashboard [OK]
Hint: Use post for form submit, then assert_redirected_to for redirect [OK]
Common Mistakes:
  • Using get instead of post for form submission
  • Checking response success instead of redirect
  • Posting to dashboard_path instead of login_path
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