Ruby on rails Rails教程第10章(友好转发)测试错误,预期响应为a<;3XX:重定向>;,但这是一个<;200:正常>;
嗯,我刚开始使用Rails编码,MichaelHartl教程非常棒,到现在为止,我已经能够找到我的编码错误。。。现在我在第10章“友好转发”中,在执行成功编辑测试时,我偶然发现了一个我看不透的错误 测试\u成功\u编辑\u与\u友好\u转发\u用户编辑测试(1.07s) 预期响应为a,但为a 测试/集成/用户编辑测试。rb:32:in'block in' 我的用户\u编辑\u测试是:Ruby on rails Rails教程第10章(友好转发)测试错误,预期响应为a<;3XX:重定向>;,但这是一个<;200:正常>;,ruby-on-rails,integration-testing,railstutorial.org,Ruby On Rails,Integration Testing,Railstutorial.org,嗯,我刚开始使用Rails编码,MichaelHartl教程非常棒,到现在为止,我已经能够找到我的编码错误。。。现在我在第10章“友好转发”中,在执行成功编辑测试时,我偶然发现了一个我看不透的错误 测试\u成功\u编辑\u与\u友好\u转发\u用户编辑测试(1.07s) 预期响应为a,但为a 测试/集成/用户编辑测试。rb:32:in'block in' 我的用户\u编辑\u测试是: require 'test_helper' class UserEditTest < ActionDis
require 'test_helper'
class UserEditTest < ActionDispatch::IntegrationTest
def setup
@user = users(:michael)
end
test "unsuccessful edit" do
log_in_as(@user)
get edit_user_path(@user)
assert_template 'users/edit'
patch user_path(@user), params: { user: { name: "",
email: "foo@invalid",
password: "foo",
password_confirmation: "bar" } }
assert_template 'users/edit'
end
test "successful edit with friendly forwarding" do
get edit_user_path(@user)
log_in_as(@user)
assert_redirected_to edit_user_url(@user)
name = "Foo Bar"
email = "foo@bar.com"
patch user_path(@user), params: { user: { name: name,
email: email,
password: "",
password_confirmation: "" } }
assert_not flash.empty?
assert_redirected_to @user <--- this is line 32 from the test
@user.reload
assert_equal name, @user.name
assert_equal email, @user.email
end
end
我的会话控制器是:
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]
before_action :correct_user, only: [:edit, :update]
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(user_params) # Not the final implementation!
if @user.save
log_in @user
flash[:success] = "Welcome to the Sample App"
redirect_to @user
else
render 'new'
end
end
def edit
end
def update
if @user.update_attributes(user_params)
flash[:success] = "Profile updated"
redirect_to @user
# Handle a successful update.
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
#Before Filters
#Confirms a logged-in user
def logged_in_user
unless logged_in?
store_location
flash[:danger] = "Please log in."
redirect_to login_url
end
end
# Confirms the correct user.
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless current_user?(@user)
end
end
class SessionsController < ApplicationController
def new
end
def create
@user = User.find_by(email: params[:session][:email].downcase)
if @user && @user.authenticate(params[:session][:password])
log_in @user
params[:session][:remember_me] == '1' ? remember(@user) : forget(@user)
redirect_back_or @user
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
def destroy
log_out if logged_in?
redirect_to root_url
end
end
class sessioncontroller
从我在其他问题中看到的情况来看,我理解问题,但似乎找不到解决问题的方法,我觉得问题就在我面前,但我看不到问题。FWIW,您的友好转发工作正常,并在测试用例的前3行中进行了测试。
assert\u redirected\u to@user
测试对应于用户控制器更新,更具体地说是if分支中的redirect\u to@user
语句。如果您登录到该站点并更新用户的配置文件,会发生什么情况?在那一点上也检查日志。是的,昨天我正在运行它,进一步了解测试代码,发现FF运行正常。。。然后我在应用程序上运行了一次,看看测试中显示的错误是否回来了。。。不,它很完美,我可以提交用户的编辑,然后审查更改。。。重定向正是我所期待的。。。苏欧!!!还在想办法你解决过这个问题吗?这里也有同样的问题:
class SessionsController < ApplicationController
def new
end
def create
@user = User.find_by(email: params[:session][:email].downcase)
if @user && @user.authenticate(params[:session][:password])
log_in @user
params[:session][:remember_me] == '1' ? remember(@user) : forget(@user)
redirect_back_or @user
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
def destroy
log_out if logged_in?
redirect_to root_url
end
end