让我在Rails中构建的api通过身份验证规范时遇到一些困难。
我的规格如下:
RSpec.describe 'POST /login', type: :request do
let(:user) { create(:user) }
let(:url) { '/login' }
let(:params) do
{
user: {
username: user.username,
email: user.email,
password: user.password
}
}
end
context 'when params are correct' do
before do
post url, params: params
end
it 'returns 200' do
expect(response).to have_http_status(200)
end
...
但是,当我尝试运行此命令时,出现以下错误:TypeError: no implicit conversion of nil into String
当我使用pry进行调试时,params
变量解析为正确的哈希值:{:user=>{:username=>"MyString", :email=>"mystring", :password=>"fooBar"}}
,URL也正确:"/login"
使用散列本身而不是像这样的变量时,它也无法工作:post url, params: {:user=>{:username=>"MyString", :email=>"mystring", :password=>"fooBar"}}
但是奇怪的是,我可以传递类似{:user=>'hello'}
之类的东西,并且即使返回401错误,它也可以运行。我在这里做什么错了?