我正在用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: "foo@bar.com",
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) }
我想我应该写这样的东西,但是如果有人知道,请给予我一些建议。谢谢你阅读这里。
1条答案
按热度按时间z6psavjg1#
解决了。通过使用factorybot将用户模型设置为“激活”来治愈。谢谢您的评论。