Integration testing with Authlogic?

北战南征 提交于 2019-11-28 23:43:52
user163236

Based on the code in the user_sessions_controller create method, which takes a hash of the login credentials, I was able to make it work like this in my integration test:

UserSession.create(:email => 'someone@example.com', :password => 'password')

but not with:

UserSession.create(@user)

I'm also using Authlogic with Shoulda (but with factory_girl on top).

My functionnal tests look like :

require 'test_helper'

class LoansControllerTest < ActionController::TestCase
[...]

  context "as a signed-in user, with an active loan" do
    setup do
      @user = Factory(:user)
      @user_session = UserSession.create(@user)
      @loan = Factory(:loan, :ownership => Factory(:ownership, :user => @user))
    end

    context "on GET to :index" do
      setup do
        get :index
      end

      should_respond_with_success
    end
  end
end

Actually, you CAN pass a valid user to UserSession, it's in the rdoc also. You should also avoid calling activate_authlogic in each controller test :

ENV["RAILS_ENV"] = "test"
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
require 'test_help'

class ActiveSupport::TestCase
  [...]
  # Add more helper methods to be used by all tests here...
  include Authlogic::TestCase

  def setup
    activate_authlogic
  end
end

I've found that for integration tests I need to login via a post:

setup do
  post 'user_session', :user_session => {:email => 'someone@example.com', :password => 'password'}
end

This sets up the session correctly, while the method mentioned above only works for me in functional tests.

Yeah, I found this week that with rspec: in functional specs you simulate log in just fine w/ UserSession.create(@user). But if you try that in an integration spec it doesn't work. In order to log in from integration specs I found I had to drive the forms (with webrat) which clearly will be a problem for things like Facebook and OpenID log in.

I couldn't make it work with the accepted answer, but was close. I had to add the exclamation sign to the end of the function:

UserSession.create!(@user)

It's working with Ruby v3.2.18 and Authlogic v3.4.2. Thanks for pointing me in the right direction though.

I'm using Cucumber and James' solution along with the following fix worked for me:

https://webrat.lighthouseapp.com/projects/10503/tickets/383-reset_session-and-webrat-dont-play-nicely-with-one-another

For the people who find this post in Google and the Greater Justice - you have to set persitence_token attribute in User model. E.g. you can call @user.reset_persistence_token! and everything just start working. :)

I had the same problem and I could fix it by manually logging in (as others have already answered)

Additionally I had to fix my cookie domain:

Rails uses www.example.com for its tests and since I set the cookie domain to a different value in my application.rb (via config.cookie_domain) the session cookie created after the login was not accessible from subsequent requests.

After setting the correct cookie domain, everything worked again.

Have a look at the rdoc.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!