开发者

authlogic not working with capybara when using the selenium driver

I have all my capybara tests working with my authlogic members area using the default driver, but when i change one test to use selenium driver as it has ajax in it, it gives my theis error :

You must activate the Authlogic::Session::Base.controller with a controller object before creating objects

Things are working with default driver for authlogic开发者_高级运维 so must be something to do with selenium ??

I have include Authlogic::TestCase in my spec_helper and

activate_authlogic
    domain.user_sessions.create(user)

in a before each.

Any one help me with this please ?

thanks rick


I posted a cucumber solution here: Log-in through authlogic without having to fill in form every time

For RSpec integration tests it's similar.

In your spec_helper.rb:

require "authlogic/test_case"
RSpec.configure do |config|
  ...
  config.include Authlogic::TestCase
  ApplicationController.skip_before_filter :activate_authlogic
  config.before(:each, :type => :request) do
    activate_authlogic
    UserSession.create(User.find_by_email!(email))
  end
  ...
end

Obviously, if your site is not login only you may want to move the two lines in config.before into a before block in your specific test for logged in specs. If you leave as is you can delete the session with UserSession.find.destroy or obviously follow the logout link (if this makes more sense in your spec).


I think the following code will work to activate authlogic:

Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self)

Having said that, I prefer defining a step that actually goes to the login form, fills it out, and logs in. It's slower, but I rarely run my entire integration test suite manually, usually the continuous integration server takes care of that.


This work for me (Rails 3.2.1) :

In spec_helper.rb

require 'authlogic/test_case' 
include Authlogic::TestCase

In In my controller_specs :

 def valid_session                                                                                                                                                                  
    activate_authlogic # run before tests are executed                                                                                                                               
    user = Factory(:user)                                                                                                                                                            
    UserSession.create(user, true) #create an authlogic session                                                                                                                      
    @user = @controller.current_user                                                                                                                                                 
    {}                                                                                                                                                                               
  end       
  # exemple of valid_session utilization in your test:
  #    valid_session
  #    user_id = @user.id
  #     
  #    or
  #
  #    get :index, {}, valid_session                                                                                                                                                  

Enjoy!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜