Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to login in feature specs

I have a helper method that is using @request.env and Devise to login the user:

def login_user(user)
  @request.env["devise.mapping"] = Devise.mappings[:user]
  sign_in user
end

I'm trying to write a feature spec where I need to login, but login_user is failing:

1) Search finds a manufacturer
 Failure/Error: @request.env["devise.mapping"] = Devise.mappings[:user]

 NoMethodError:
   undefined method `env' for nil:NilClass
 # ./spec/support/controller_macros.rb:3:in `login_user'
 # ./spec/features/search_spec.rb:17:in `block (2 levels) in <top (required)>'

How can I fix? I have no experience with feature specs, with cucumber I'd use a feature to login, I'm definitely not sure that's the best practice with rspecs. Thanks in advance.

like image 593
ngw Avatar asked Sep 16 '25 01:09

ngw


1 Answers

In Capybara feature specs in my app, we use the Warden test helpers:

# spec/rails_helper.rb
RSpec.configure do |config|
  config.include Warden::Test::Helpers
  Warden.test_mode!
end

# in the feature spec
login_as(user, scope: :user)

Also, for controller specs:

allow(controller).to receive(:current_user).and_return(user)
like image 64
Sage Ross Avatar answered Sep 19 '25 09:09

Sage Ross



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!