RSpec, аутентификация пользователя Devise в спецификациях запроса

Я пытаюсь написать спецификации запроса RSpec, чтобы протестировать API моего сервиса, и для этого мне нужно, чтобы пользователь прошел аутентификацию. Я нашел несколько примеров в сети, но ничего не работает, на данный момент я застрял с этим:

require "spec_helper"

include Warden::Test::Helpers
Warden.test_mode!

describe "My requests" do

  it "creates an imaginary object" do
    user = FactoryGirl.create(:user)
    login_as(user, :scope => :user)
    post "/my_service", :my_data=> {:some => "data"}
    expect(response.body).to include("success")
  end

end

И ошибка, которую я получаю:

 ArgumentError: uncaught throw :warden

Спасибо за помощь.


person a.s.t.r.o    schedule 04.03.2013    source источник


Ответы (2)


Вам нужно фактически войти в систему пользователя (т.е. пользователь должен отправить форму входа или, по крайней мере, выполнить POST для вашего действия входа), как описано здесь: Заглушение аутентификации в спецификации запроса

person doesterr    schedule 05.03.2013
comment
Это именно то, что я пытаюсь сделать с помощью надзирателя, как видите, безрезультатно. - person a.s.t.r.o; 05.03.2013
comment
Соответствующий ответ помог мне найти альтернативный способ, который работает, так что спасибо за это. - person a.s.t.r.o; 05.03.2013
comment
@AdnanDoric, чтобы узнать, что вы нашли решение, волшебным образом заставит мои проблемы решиться сами собой. Потрясающий - person Benj; 01.09.2015
comment
@AdnanDoric, если бы вы могли обновить свой вопрос, указав несколько деталей, это было бы здорово. У меня такие же проблемы здесь, и любая помощь будет отличной. Я думаю, это может быть то, к чему Бенджамин имел ввиду. - person CJBrew; 30.10.2015

Проще всего просто:

spec/rails_helper.rb

RSpec.configure do |config|
  # ...
  config.include Devise::Test::IntegrationHelpers, type: :request
end

И просто используйте sign_in в своей спецификации запроса. Это эквивалентно объявлению include Devise::Test::IntegrationHelpers в спецификации системы/функции или в тесте системы/контроллера Rails.

Выполнение этого таким образом приводит к «лучшему» тесту.

person ybakos    schedule 19.05.2018
comment
применив это решение, я получаю /helpers.rb:19›] - person Humayun Naseer; 02.04.2021