因此我们将Rails应用程序从Rails 4.2升级到Rails 5.1。一切顺利,直到我必须升级我们的测试。我们有一个oauth_spec文件,用于检查我们的Auth进程是否正常。
我目前正在更改Rspec语法,所以一切正常,但我确实坚持我们的一个测试。它一直让我回复401-未经授权,我想我已经阅读了StackOverflow上可以找到的所有内容。
这是我们的测试在4.2中的样子:
$('.mybtn').on('click', function (e) {
e.preventDefault(); // This prevent the hyperlink from reloading the page.
$('.mybtn-active').removeClass('mybtn-active');
$(this).addClass('mybtn-active');
});
这就是我到目前为止所得到的:
it "grants access to a user's data when he sets an Authentication token as a request parameter" do
data =
{
"grant_type" => "password",
"password" => password,
"username" => user.email
}
post('/oauth/token', data, {'HTTP_ACCEPT' => "application/json"})
token = json["access_token"]
get('/users/me', data, {'HTTP_ACCEPT' => "application/json", "Authorization" => "Bearer #{token}"})
expect(response).to have_http_status(200)
expect(json["email"]).to eq(user.email)
end
第一个帖子请求工作正常,并给我我的持票人。但接下来的一次休息我总是得到:
失败/错误:期望(响应).to have_http_status(200)期望响应的状态代码为200,但它是401
有没有人知道我能做些什么让这项工作?
答案 0 :(得分:1)
您的原始代码:
get('/users/me', data, {'HTTP_ACCEPT' => "application/json", "Authorization" => "Bearer #{token}"})
您的新代码:
header = {"Authorization": "Bearer #{token}", "Accept": "application/json"}
request.headers.merge!(header)
get '/users/me'
在原始代码中,您将data
(用户名和密码)作为参数传递,而在Rails 5代码中,您不再传递该数据。 可能是401错误的一个原因,但鉴于规范标题,我认为不是。
我建议你这样做:
get '/users/me', headers: {"Authorization": "Bearer #{token}", "Accept": "application/json"}