ruby-on-rails - 通过 RSpec 设置 session 值

标签 ruby-on-rails ruby session rspec

我当前的代码如下所示:

/spec/support/spec_test_helper.rb

module SpecTestHelper
  def login_admin
    user = FactoryGirl.create(:user, type: 0)
    session[:user_id] = user.id
  end
end

/app/controllers/application_controller.rb

def current_user
  if session[:user_id].nil?
    render plain: 'Error', status: :unauthorized
  else
    @current_user ||= User.find(session[:user_id])
  end
end

不幸的是,current_user方法中的session总是空的。有没有办法通过 RSpec 控制 session ?

最佳答案

这将根据规范类型而变化。例如,feature 规范不允许您直接修改 session 。但是,controller 规范会。

您需要包含 helper methods module进入您的示例组。假设您有一个 WidgetsController:

require 'support/spec_test_helper'

RSpec.describe WidgetsController, type: :controller do
  include SpecTestHelper

  context "when not logged in" do
    it "the request is unauthorized" do
      get :index
      expect(response).to have_http_status(:unauthorized)
    end
  end

  context "when logged in" do
    before do
      login_admin
    end

    it "lists the user's widgets" do
      # ...
    end
  end
end

您也可以automatically include the module进入所有规范,或specific specs通过使用 metadata .

我经常通过将配置更改添加到定义辅助方法的文件中来做到这一点:

/spec/support/spec_test_helper.rb

module SpecTestHelper
  def login_admin
    user = FactoryGirl.create(:user, type: 0)
    session[:user_id] = user.id
  end
end

RSpec.configure do |config|
  config.include SpecTestHelper, type: :controller
end

关于ruby-on-rails - 通过 RSpec 设置 session 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30462215/

相关文章:

ruby-on-rails - 检查 Rails 中是否存在表

ruby-on-rails - 将外键添加到 Rails 模型

ruby-on-rails - Rails 复选框可选区域

ruby-on-rails - 如何在 Rails 应用程序中使用磁盘配额?

node.js - 如何从 NodeJS 将 session 存储在 MongoDB 中?

php - 以特定方式显示数组元素

ruby-on-rails - Cucumber/Capybara/Selenium - 设置 cookie

ruby-on-rails - 从复选框构建数组时 form_for 的语法

ruby-on-rails - 使用 Capistrano 进行部署 : How to set file and folder permissions?

php - PHP session 变量处理不当?