我有以下错误:
test "login with invalid information" do
get login_path
assert_template 'session/new'
post login_path, session: { email: "", password: "" }
assert_template 'session/new'
assert_not flash.empty?
get root_path
assert flash.empty?
end
user_login_test.rb中的相关代码:
require 'test_helper'
class UsersEditTest < ActionDispatch::IntegrationTest
def setup
@user = User.find_by_name(:testuser)
end
test "unsuccessful edit" do
log_in_as(@user)
get edit_user_path(@user)
assert_template 'users/edit'
patch user_path(@user), user: { name: "",
email: "foo@invalid",
password: "foo",
password_confirmation: "bar" }
assert_template 'users/edit'
end
test "successful edit" do
log_in_as(@user)
get edit_user_path(@user)
assert_template 'users/edit'
name = "Foo Bar"
email = "foo@bar.com"
patch user_path(@user), user: { name: name,
email: email,
password: "",
password_confirmation: "" }
assert_not flash.empty?
assert_redirected_to @user
@user.reload
assert_equal name, @user.name
assert_equal email, @user.email
end
end
users_edit_test.rb:
def log_in_as(user, options = {})
password = options[:password] || 'password'
remember_me = options[:remember_me] || '1'
if integration_test?
get login_path
post login_path, session: { email: user.name,
password: password,
remember_me: remember_me
}
else
session[:user_id] = user.id
end
end
经过几个小时的努力追捕问题,我仍然无法找到它。跟踪几个问题,我觉得这可能是以下测试登录代码的问题:
FIREBIRD_LOCK
我很乐意根据需要更新更多信息,但我很不知所措。
答案 0 :(得分:1)
您似乎重定向而不是渲染。试试这个:
expect(response).to redirect_to root_path
确保您重定向
答案 1 :(得分:0)
我目前正在研究同一Rails tutorial的第9章,我遇到了几乎相同的问题。在控制台中玩了一段时间之后,我决定在浏览器中手动测试它,即使我已经登录,也确实无法进入我的编辑页面。这让我觉得它可能不是我测试的问题而是使用users_controller中的授权。
原来我完全忘记将redirect_to login_url(在logged_in_user过滤器中)放在一个除外块中,所以无论如何它总是只是重定向到登录页面。正确的代码是:
def logged_in_user
unless logged_in?
flash[:danger] = 'Please log in.'
redirect_to login_url
end
end
现在我的测试正在通过。也许你遇到过类似的问题。无论哪种方式,我经常发现只返回浏览器并尝试手动复制集成测试很有用,只是为了弄清楚我的代码是否存在问题,或者我只是写了一个狡猾的人测试