authlogic not working with capybara when using the selenium driver
我的所有 capybara 测试都使用默认驱动程序与我的 authlogic 成员区域一起工作,但是当我将一个测试更改为使用 selenium 驱动程序时,因为它有 ajax,它给出了我的 theis 错误:
1 | You must activate the Authlogic::Session::Base.controller with a controller object before creating objects |
事情正在使用 authlogic 的默认驱动程序,所以必须与 selenium 有关??
我在我的 spec_helper 和
中包含了 Authlogic::TestCase
1 2 | activate_authlogic domain.user_sessions.create(user) |
在每个之前。
有人帮我解决这个问题吗?
谢谢瑞克
我这里贴了一个Cucumber 解决方案:通过authlogic登录而不必每次都填写表单
对于 RSpec 集成测试,它是类似的。
在你的
1 2 3 4 5 6 7 8 9 10 11 | 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 |
显然,如果您的站点未仅登录,则您可能希望将 config.before 中的两行移动到特定测试中的 before 块中以用于登录规范。如果您保持原样,您可以使用
我认为下面的代码可以激活 authlogic:
1 | Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self) |
话虽如此,我更喜欢定义一个实际进入登录表单、填写并登录的步骤。它比较慢,但我很少手动运行整个集成测试套件,通常是持续集成服务器会处理的。
这对我有用(Rails 3.2.1):
在 spec_helper.rb
中
1 2 | require 'authlogic/test_case' include Authlogic::TestCase |
在我的控制器规格中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 |
享受吧!