gpt4 book ai didi

ruby-on-rails - 测试期间 nil 类的未定义方法 '[]'

转载 作者:行者123 更新时间:2023-11-28 21:25:17 26 4
gpt4 key购买 nike

我正在学习如何在 Rails 中编写自动化测试,但遇到了问题。这是我的测试:

test "login invalido" do
get new_usuario_path
assert_template 'usuarios/new'
post login_path, params: { sessao: { email: "", password: "" } }
assert_template 'usuarios/new'
assert_not flash.empty?
get root_path
assert flash.empty?
end

这是 login_path 中的方法:

def create
byebug
u = Usuario.find_by(email: params[:sessao][:email].downcase) #the error happens here
if u.present? && u.authenticate(params[:sessao][:password])
puts "aqui"
else
flash[:danger] = 'Ops! Email ou senha inválidos.'
redirect_to new_usuario_path
end
end

编辑:我在上面标记了错误发生的行。

我正在尝试验证闪烁错误消息是否显示并且在导航过程中不会停留(我使用 this book 作为引用)。我本以为这次测试会失败,但我却得到了一个错误:

 1) Error:
LoginTest#test_login_invalido:
NoMethodError: undefined method `[]' for nil:NilClass
app/controllers/sessao_controller.rb:7:in `create'
test/integration/login_test.rb:7:in `block in <class:LoginTest>'

似乎 params 散列不正确,但是当使用 byebug 运行测试时,我看到散列正确到达:

(byebug) params
{"params"=>{"sessao"=>{"email"=>"", "password"=>""}}, "controller"=>"sessao", "action"=>"create"}

我错过了什么?

最佳答案

您传递的参数是 Hash 类的实例,而不是 ActionController::Parameters

因此,要么使散列 .with_indifferent_access

post login_path, params: { sessao: { email: "", password: "" } }.with_indifferent_access

或者

ActionController::Parameters.new({ sessao: { email: "", password: "" } })

关于ruby-on-rails - 测试期间 nil 类的未定义方法 '[]',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42393672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com