我正在尝试为登录函数编写测试代码,但测试代码给了我一个错误。我的rails代码只是一个API,并发送和接收JSON:
NoMethodError:
undefined method `[]' for nil:NilClass
以下是我要写的Rspec
代码:
describe 'POST doctors/login' do
it 'successfully logs a doctor in' do
login_params = {
"login"=>{
"email" => "knkjn@aol.com",
"password" => "123456"
}
}.to_json
request_headers ={
'Accept' => 'application/json',
'Content_type' => 'application/json'
}
post 'login', login_params, request_headers
expect(response.status).to eq 200
end
end
以下是我的控制器的方法,我正在尝试为以下代码制作测试代码:
def login
response = Response.new
this_doctor = Doctor.find_by_username(login_params["username"])
if this_doctor && this_doctor.authenticate(login_params["password"])
response.data = {:remember_token => this_doctor.sign_in}
response.code = true
else
response.code = false
response.error = "Invalid Login"
end
render :json => response.json
end
以下是我接受来自params
的JSON请求的方法def login_params
return nil unless params["login"]
params.require(:login).permit(:email, :password)
end
这是JSON
请求(我已经使用DHC Chrome插件测试了POST请求的JSON请求,并且我已经验证了控制器中的登录功能正常运行。):
{
"login": {
"email": "walasif@gmail.com",
"password": "123456"
}
}
在JSON中为API编写测试代码时,我有什么特别之处吗?测试代码似乎没有正确地将params发送到我的控制器。