Как я запускаю тест с помощью rspe c, используя simple_token_authentication и devise - PullRequest
0 голосов
/ 14 июля 2020

Я запускаю свой тест, но sign_in не аутентифицируется.

require 'rails_helper'

describe "get all contacts route", :type => :request do
    let!(:contacts) {FactoryBot.create_list(:random_contacts, 20)}

    before(:each) do 
        get '/api/v1/contacts'
        user = FactoryBot.create(:user)
        
        request.env["devise.mapping"] = Devise.mappings[:user]
        request.headers['X-User-Email'] = "#{user.email}"
        request.headers['X-User-Token'] = "#{user.authentication_token}"
        sign_in user
    end

    it 'returns all contacts' do
        expect(JSON.parse(response.body).size).to eq(20)
    end
    it 'returns status code 200' do
        expect(response).to have_http_status(:success)
    end
end

Результат теста:

"{\"error\":\"You need to sign in or sign up before continuing.\"}"

https://github.com/andbri321/one_bit_contacts/tree/feature/test_contact

1 Ответ

0 голосов
/ 14 июля 2020

Возможно, вы захотите создать помощников по входу / выходу. Что-то вроде

module DeviseRequestSpecHelpers

  include Warden::Test::Helpers

  def sign_in(resource_or_scope, resource = nil)
    resource ||= resource_or_scope
    scope = Devise::Mapping.find_scope!(resource_or_scope)
    login_as(resource, scope: scope)
  end

  def sign_out(resource_or_scope)
    scope = Devise::Mapping.find_scope!(resource_or_scope)
    logout(scope)
  end

end

А затем загрузите их в конфигурацию RSpe c следующим образом:

RSpec.configure do |config|
  config.include DeviseRequestSpecHelpers, type: :request
end

Затем используйте эти помощники перед запуском тестов.

Подробнее см. .

...