Day15 测试写起乃 - Devise login user

在开始写测试的时候因为许多 action 进入前都必须要先登入使用者才能有权限做其他事情,但在测试该如何登入使用者呢? 其实在 Devise 有提供 sign_in 给测试做使用

login_user

rspec 如果不想要每次都一直sign_in @user 还有设定一些条件 其实可以做成一个 module 方便在测试的时候不用一直登入而且可以在里面做其他更多的预设条件

如果想要有sign_in的方法使用需要先在spec_heloper加上

  config.include Devise::TestHelpers, type: :controller # controller spec才需要加
  config.include Devise::Test::IntegrationHelpers, type: :request # request spec才需要加

然後在/spec/support下新增ControllerMacros.rb

# ControllerMacros.rb

module ControllerMacros
  # possible roles: :user, :admin, :pos_user
  def login_user(role = nil, type: :each)
    before(type) do
      @user = create(role || :user)
    end

    before(:each) do
      @request.env['devise.mapping'] = Devise.mappings[:user]
      sign_in @user
    end
  end
end

最後再把这个档案 extends 到spec_helper即可

config.extend ControllerMacros, type: :controller 
#request spec要改成type: :request

就能够做到在 rspec 中登入 user 搂!

遇到的雷

再将controller改成request的时候发现
Devise::TestHelpers, type: :controller不能只把type改成request 可能会出现错误 undefined method env for nilnilclass

在 rpsec relish写到

Request specs are RSpec wrappers for Rails integration tests.

才知道request spec可能被归类为 integration test 所以要include的helper应该是Devise::Test::IntegrationHelpers, type: :request

只要增加这行就没问题了!


<<:  什麽是统一建模语言 (UML)?

>>:  Day 15 CSS isolation

Day13|【Git】档案管理 - 档案还原 git checkout

当我们不小心把档案或目录删除时,有什麽办法可以还原档案呢? git checkout 、git re...

99 - 顺手工具的最好

到这里,这趟旅程也已经接近尾声了,但是好用的工具却不只有这些,在这些工具之外还有许多的遗珠之憾,有些...

6. STM32-NVIC USART

USART介绍 USART全名为通用同步/非同步收发传输器(universal synchronou...

22. 一些关於leadership的事

前言 (Sorry标题取的很烂,但我有点难抓到整个演讲想讲的重点XD|||) 这篇蛮general...

MLOps 带给商业与技术流程的5个好处与13个指标 | MLOps落地指南 - 流程篇

MLOps除了ML之外,另一部分则是DevOps(develop operations)。事实上,技...