Передача токена Devise в спецификациях для Rails 5 API
У меня есть базовый Rails API, созданный с использованием учетных записей и пользователей. Все характеристики учетной записи проходят, когда я удаляю...
before_action :authenticate_user!
Но с этим у меня возникли проблемы с получением спецификаций.
# Note `json` is a custom helper to parse JSON responses
RSpec.describe 'Account API', type: :request do
# test data
let!(:user) { create(:user) }
let!(:accounts) { create_list(:account, 10, user_id: user.id) }
let(:account_id) { accounts.first.id }
# GET /accounts
describe 'GET /accounts' do
# HTTP request before examples
before do
get '/accounts'
request.headers.merge! user.create_new_auth_token
end
it 'returns accounts' do
expect(json).not_to be_empty
expect(json.size).to eq(10)
end
it 'returns status code 200' do
expect(response).to have_http_status(200)
end
end
end
Как видите, я попытался объединить токен аутентификации с этой строкой в блоке before do...
request.headers.merge! user.create_new_auth_token
Но это не работает. Вместо этого я получаю json.size == 1 и http_status из 401 несанкционированных.
1 ответ
Решение
Я смог это исправить, объявив переменную сверху...
let(:auth_headers) { create(:user).create_new_auth_token }
И в моих спецификациях, используя это так...
before { get '/accounts', headers: auth_headers }