RSpec, authenticating Devise user in request specs

a.s.t.r.o picture a.s.t.r.o · Mar 4, 2013 · Viewed 9.4k times · Source

I'm trying to write RSpec request specs in order to test my service API and for that I need the user to be authenticated. I found some examples on the net but nothing works, for the moment I'm stuck with this:

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

And the error I'm getting is:

 ArgumentError: uncaught throw :warden

Thank you for your help.

Answer

ybakos picture ybakos · May 20, 2018

It is simplest to just:

spec/rails_helper.rb

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

And just use sign_in in your request spec. This is the equivalent of declaring include Devise::Test::IntegrationHelpers in an system/feature spec or Rails system/controller test.

Doing it this way leads to a 'better' test.