Rails4 + Authlogic + rspec

必须修改

使用Rails 4,我在获取Authlogic来查看伪造的UserSession时遇到问题。

我已经设置了pages#whoami来呈现当前用户的电子邮件地址,以简化测试。

class PagesController < ApplicationController
  # before_filter :require_user

  def whoami
    render :text => current_user.try(:email) || 'anonymous'
  end
end

在spec / spec_helper.rb中:

require "authlogic/test_case"
include Authlogic::TestCase

和我的rspec测试:

require 'spec_helper'

describe '/whoami' do
  setup :activate_authlogic

  it "should tell me who I am" do
    user = FactoryGirl.create(:user)
    user.should be_valid

    session = UserSession.create(user)
    session.should be_valid

    get '/whoami'
    response.body.should == user.email
  end
end

我更新了应用程序控制器以显示当前会话:

  def require_user
    unless current_user
raise "Current User Session is: #{ current_user_session.inspect}"
    store_location
    flash[:notice] = "You must be logged in to access this page"
    redirect_to new_user_session_url
    return false
  end
end

在对before_filter:require_user进行注释之后,我正确地得到了“匿名”。取消注释时,我看到我的用户会话为nil。我尝试查看authlogic代码,但在Authlogic :: Session:Persistence :: InstanceMethods#persisting中迷路了?

我正在尝试调试。这是我到目前为止的位置。

在这里,我们尝试将Authlogic :: Session :: Base.controller设置为测试的模拟控制器:https : //github.com/binarylogic/authlogic/blob/master/lib/authlogic/test_case.rb#L109

在我的规范中,我看到@controller是Authlogic :: TestCase :: MockController

在我的规范中,我看到Authlogic :: Session :: Base.controller设置为该模拟控制器。

但是,我然后检查此:

class ApplicationController < ActionController::Base
  ...

  def current_user_session
    raise Authlogic::Session::Base.controller.inspect
    ...
  end
end

并且我看到Authlogic :: ControllerAdapters :: RailsAdapter ... ...因此,以某种方式设置了控制器,但该控制器未持久。我想知道这是否与从Rails3切换到Rails4有关?

任何对此的见解将不胜感激。

感兴趣的人的宝石版本:gem rspec-core(2.14.5)gem authlogic(3.3.0)gem rails(4.0.0)

亚伦·K

根据https://stackoverflow.com/a/5803121,请求规范只是的薄包装ActionDispatch::IntegrationTest因此session,与正常的控制器规格不同,无法直接访问

因此,无法直接使用AuthLogic确实依赖会话和Cookie的直接登录用户

它首先进行身份验证,然后设置正确的会话值和cookie以持久化会话。

对于请求/集成/ api /功能规范,必须直接向登录路径发出请求,以在后台设置正确的会话/ cookie。然后,将使用正确的值将集成会话发送回去(就像普通的Web请求一样)。

为了使生活更轻松,您可以添加一个辅助方法,该方法可以包含在请求/集成/ api /功能规范中:

# spec/support/auth_logic_helpers.rb
module Authlogic
  module TestHelper
    # You can call this anything you want, I chose this name as it was similar
    # to how AuthLogic calls it's objects and methods
    def create_user_session(user)
      # Assuming you have this defined in your routes, otherwise just use:
      #   '/your_login_path'
      post user_session_path, login: user.login, password: user.password
    end
  end
end

# Make this available to just the request and feature specs
RSpec.configure do |config|
  config.include Authlogic::TestHelper, type: :request
  config.include Authlogic::TestHelper, type: :feature
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rspec Rails打印很多警告

来自分类Dev

Rails 4,rspec 3:模型验证测试

来自分类Dev

在Rails4中开始

来自分类Dev

Rails 4:使用MiniTest和Rspec

来自分类Dev

rails4,强大的参数

来自分类Dev

Rails 4 and Rspec - generate controller test

来自分类Dev

Rails协会Rspec

来自分类Dev

Authlogic错误的密码验证错误

来自分类Dev

使用HTTP基本身份验证后,rails authlogic找不到current_user(nil)

来自分类Dev

Authlogic。什么哈希函数?

来自分类Dev

rails 5 authlogic神秘的user_session错误

来自分类Dev

rspec测试子类sti方法rails 4

来自分类Dev

Rails-Rspec-存根参数

来自分类Dev

Rspec ActionController :: UrlGenerationError Rails 4.2

来自分类Dev

优化Rails RSpec测试

来自分类Dev

Kaminari on rails4错误

来自分类Dev

Rails 4.1.0和authlogic bcrypt问题

来自分类Dev

Rspec-rails 4错误:ActiveModel :: ForbiddenAttributesError

来自分类Dev

rspec和gmaps4rails的问题

来自分类Dev

rails4,强大的参数

来自分类Dev

Authlogic错误的密码验证错误

来自分类Dev

Authlogic。什么哈希函数?

来自分类Dev

Authlogic:功能测试失败验证

来自分类Dev

rails4 // ActionController :: UnknownFormat

来自分类Dev

rspec核心Ruby on Rails

来自分类Dev

Rspec的“ on::update”测试验证不起作用(Rails4 / Rspec 3)

来自分类Dev

Rspec Rails错误

来自分类Dev

Rspec / Rails4,对象属性更新不持久存在于控制器规范中吗?

来自分类Dev

Ruby on Rails Rspec 验证