在开始写测试的时候因为许多 action 进入前都必须要先登入使用者才能有权限做其他事情,但在测试该如何登入使用者呢? 其实在 Devise
有提供 sign_in
给测试做使用
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
只要增加这行就没问题了!
当我们不小心把档案或目录删除时,有什麽办法可以还原档案呢? git checkout 、git re...
到这里,这趟旅程也已经接近尾声了,但是好用的工具却不只有这些,在这些工具之外还有许多的遗珠之憾,有些...
USART介绍 USART全名为通用同步/非同步收发传输器(universal synchronou...
前言 (Sorry标题取的很烂,但我有点难抓到整个演讲想讲的重点XD|||) 这篇蛮general...
MLOps除了ML之外,另一部分则是DevOps(develop operations)。事实上,技...