将辅助模块添加到 Rspec
Adding helper module to Rspec
我想添加一个模块,其中包含帮助我以用户身份登录的方法。这是:
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
?
您可以从测试中将 @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 中的宏模式。
除了其他答案之外,您还应该考虑使用以下代码仅将此模块包含在相关规范类型中:
config.include TestHelper, type: :controller # Or whatever spec type(s) you're using
我想添加一个模块,其中包含帮助我以用户身份登录的方法。这是:
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
?
您可以从测试中将 @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 中的宏模式。
除了其他答案之外,您还应该考虑使用以下代码仅将此模块包含在相关规范类型中:
config.include TestHelper, type: :controller # Or whatever spec type(s) you're using