在验收规范中使用令牌身份验证测试rails api的正确方法是什么?



我正在为一个rails api编写验收规范。我能够在请求规范中执行此操作,但我想构建验收规范,以便使用 rspec_api_documentation gem 生成文档。

我的请求规范如下所示:

let(:headers) { { 'accept': 'application/json' } }
let(:user) { users(:jane) }
describe '#show' do
let(:endpoint) { "/api/v1/users/#{user.username}" }
context 'when authenticated' do
let(:expected_response) { "{"user":#{user.to_builder.target!}}" }
let(:headers) { { 'Authorization': token, 'accept': 'application/json' } }
let(:token) do
post '/api/v1/authenticate',
params: { email: user.email, password: 'testpassword' },
headers: { 'accept': 'application/json' }
JSON.parse(response.body)['auth_token']
end
it 'I can get user info' do
get endpoint, params: {}, headers: headers
expect(response.content_type).to eq("application/json")
expect(response.body).to eq expected_response
end
end
end

到目前为止,我有这个,但它不起作用,因为 let 变量在示例组之外无法访问。

RSpec.resource 'Users' do
header 'Accept', 'application/json'
header 'Content-Type', 'application/json'
get '/api/v1/users/:id' do
explanation 'First, get an auth token, then request user info'
fixtures :users
let(:auth_token) do
client.post '/api/v1/authenticate',
params: { email: user.email, password: 'testpassword' },
headers: { 'accept': 'application/json' }
JSON.parse(response_body)['auth_token']
end
let(:id) { user.id }
let(:user) { users(:jane) }
header 'Authorization', auth_token
example_request 'Getting a specific user' do
expect(response_body).to eq(user.to_json)
expect(status).to eq(200)
end
end
end

来自 gem 的文档:

页眉

此方法采用标头名称和值。该值可以是字符串或符号。如果它是一个符号,它将发送符号,允许您让标头值。

基于此,我认为您必须像这样声明标头:

header 'Authorization', :auth_token

看看引用段落正下方文档中的示例。

最新更新