我想添加一个模块,其中包含一个帮助我以用户身份登录的方法。这是:
module TestHelper
require 'spec_helper'
ALL_USERS = ["administrator", "instructor", "regular_user"]
def self.login_as(user_type)
user = User.find_by(global_role_id: GlobalRole.send(user_type))
@request.env["devise.mapping"] = Devise.mappings[:user]
sign_in user
end
end
调用它的规范是
require 'spec_helper'
RSpec.describe QuestionsController, :type => :controller do
include Devise::TestHelpers
include TestHelper
describe "a test" do
it "works!" do
TestHelper.login_as("administrator")
end
end
end
这是spec_helper
RSpec.configure do |config|
config.include TestHelper, :type => :controller
我得到的错误是:undefined method 'env' for nil:NilClass
我的模块看起来无法访问@request
。
我的问题是:如何在外部模块中访问和@request
?
答案 0 :(得分:1)
您可以从测试中将@request
传递给TestHelper.login_as
。例如
module TestHelper
def self.login_as(user_type, request)
...
request.env['devise.mapping'] = Devise.mappings[:user]
...
end
end
...
describe 'log in' do
it 'works!' do
TestHelper.login_as('administrator', @request)
end
end
但如果其他设计映射在游戏中,可能最好遵循devise wiki中的宏模式。
答案 1 :(得分:0)
除了其他答案之外,您还应考虑使用以下代码仅将此模块包含在相关规范类型中:
config.include TestHelper, type: :controller # Or whatever spec type(s) you're using