Сбой аутентификации пользователя в Rspec - PullRequest
0 голосов
/ 04 июля 2018

На фабриках.rb:

FactoryBot.define do
  factory :user do
    email { Faker::Internet.email }
    username { Faker::FunnyName.name.downcase.gsub(/\s/,"_") }
    first_name { Faker::Name.name }
    last_name { Faker::Name.name }
    password "password"
    password_confirmation "password"
    confirmed_at Date.today
    roles { [ FactoryBot.create(:role) ] }

    factory :admin do
      roles { [ FactoryBot.create(:admin_role) ] }
    end
  end

  factory :role do
    name { Faker::Job.field.downcase }

    factory :admin_role do
      name "admin"
    end
  end

В support/controller_macros.rb

module ControllerMacros
  def login_admin
    before(:each) do
      @request.env["devise.mapping"] = Devise.mappings[:admin]
      admin = FactoryBot.create(:admin)
      sign_in :user, admin
    end
  end
end

В rails_helper.rb:

  config.include Devise::Test::ControllerHelpers, type: :controller
  config.extend ControllerMacros, type: :controller

In filters_controller_spec.rb:

require 'rails_helper'

describe GlobalFiltersController, type: :controller do
  describe "GET #new" do
    context "when model is an :ActiveRecord object" do
      login_admin

      it "should have a current_user" do
        expect(subject.current_user).to_not eq(nil)
      end

Тем не менее, я получаю следующие результаты в Rspec:

FiltersController GET #new when model is an :ActiveRecord object should have a current_user
     Failure/Error: expect(subject.current_user).to_not eq(nil)

     ArgumentError:
       uncaught throw :warden

Ошибка входа. Но в моем приложении это не подводит. Я не уверен, что я делаю неправильно в этом тесте. Как я могу пройти тест, когда использую Devise?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...