Передача токена 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 }
Другие вопросы по тегам