Я следую учебному пособию Майкла Хертла «Learn Enough Rails», и случайно заметил, что метод log_in_as
не работает для пользователей, которые не являются администраторами. Первоначально я входил в систему @admin_user
, чтобы протестировать метод, и он работал нормально, но позже начался сбой другого теста. Я проследил его до метода log_in_as
, не выполняющего вход в систему для пользователей без прав администратора (а именно, @other_user
).
22:52:30 - INFO - Running: test/controllers/users_controller_test.rb
Running via Spring preloader in process 634866
Started with run options --seed 27389
FAIL["test_log_in_as_method_works", #<Minitest::Reporters::Suite:0x000055ce9c593998 @name="UsersControllerTest">, 0.6345567099997425]
test_log_in_as_method_works#UsersControllerTest (0.63s)
Expected false to be truthy.
test/controllers/users_controller_test.rb:45:in `block in <class:UsersControllerTest>'
users_controller_test.rb (соответствующая часть):
require 'test_helper'
class UsersControllerTest < ActionDispatch::IntegrationTest
def setup
@admin_user = users(:Danbug)
@other_user = users(:Pepe)
@unactivated_user = users(:Kaidabug)
end
test "log_in_as method works" do
log_in_as(@other_user) # "log_in_as(@admin_user)' works as expected
assert is_logged_in?
end
test_helper (соответствующая часть):
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
fixtures :all
include ApplicationHelper
# Returns true if a user is logged in
def is_logged_in?
!session[:user_id].nil?
end
# Log in as a particular user (controller test)
def log_in_as(user)
session[:user_id] = user.id
end
users.yml (у меня есть младшая сестра, которой весело составлять поддельные имена для моих тестов):
Danbug:
name: Danbug Buggaroo
email: danbuggie@meowmail.com
password_digest: <%= User.digest('password') %>
admin: true
activated: true
activated_at: <%= Time.zone.now %>
Pepe:
name: Pepe Pepperton
email: Pepe@meowmail.com
password_digest: <%= User.digest('password') %>
admin: false
activated: true
activated_at: <%= Time.zone.now %>
Kaidabug:
name: Kaidabug Buggaroo
email: Kaidabuggie@meowmail.com
password_digest: <%= User.digest('password') %>
activated: false
activated_at: <%= Time.zone.now %>