我正在用 Rails 做一个应用程序。
我正在用 rspec 编写测试。我得到了一个错误。
我会先告诉你错误。
Failure/Error: expect(response).to redirect_to user_path(user)
Expected response to be a redirect to <http://www.example.com/users/1> but was a redirect to <http://www.example.com/login>.
Expected "http://www.example.com/users/1" to be === "http://www.example.com/login".
# ./spec/requests/users_request_spec.rb:28:in `block (3 levels) in <top (required)>'
接下来我会告诉你测试
require 'rails_helper'
RSpec.describe "Users", type: :request do
describe "PATCH /users/:id" do
let(:user) { FactoryBot.create(:user) }
before { log_in_as(user) }
it 'Successful edit with valid information entered' do
patch user_path(user), params: { user: {
name: "Foo Bar",
email: "[email protected]",
password: "",
password_confirmation: "",
} }
expect(response).to redirect_to user_path(user)
end
end
end
在测试开始时显示 log_in_as(user) 方法。
spec/support/integration_helpers.rb
module IntegrationHelpers
def is_logged_in?
!session[:user_id].nil?
end
def log_in_as(user, password: 'password', remember_me: '1')
post login_path, params: { session: { email: user.email,
password: password,
remember_me: remember_me } }
end
end
我建立了一个使用电子邮件激活帐户的系统。
这是一个会话控制器,只登录那些通过电子邮件验证其帐户的人。
app/controllers/sessions_controller.rb
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
if user.activated?
forwarding_url = session[:forwarding_url]
reset_session
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
log_in user
redirect_to forwarding_url || user
else
message = "Account not activated. "
message += "Check your email for the activation link."
flash[:warning] = message
redirect_to root_url
end
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new', status: :unprocessable_entity
end
end
def destroy
log_out if logged_in?
redirect_to root_url, status: :see_other
end
end
在介绍账户激活之前,第一个测试通过。 我认为您可能需要像测试助手的 log_in_as 方法一样对测试用户进行预验证。但我不知道怎么做。
before { log_in_as(user) }
我想我应该写点类似的东西,但如果有人知道,请给我一些建议。感谢您阅读到这里。