Я изучаю, как писать автоматические тесты в рельсах, и у меня возникает проблема. Вот мой тест:Неопределенный метод '[]' для класса nil во время теста
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"}
Что мне не хватает?
'params' - это метод? –
Нет, params - это хеш с параметрами, которые будут переданы методу 'create' и будут использоваться здесь:' u = Usuario.find_by (email: params [: sessao] [: email] .downcase) ' – Tuma
вы не отправляете любые параметры в метод создания. –