RSpec和designe:无法在admin中登录
我正在将我的standart-Rails单元测试迁移到RSpec,我在designe上遇到了问题。所有包含设备身份验证的控制器都无法通过RSpec进行验证 我尝试在RSpec中的管理员中按照设计教程进行签名,但没有成功: 以下是我尝试过的: /规格/控制器/ipad\u技术\u信息\u控制器\u规格rbRSpec和designe:无法在admin中登录,rspec,devise,Rspec,Devise,我正在将我的standart-Rails单元测试迁移到RSpec,我在designe上遇到了问题。所有包含设备身份验证的控制器都无法通过RSpec进行验证 我尝试在RSpec中的管理员中按照设计教程进行签名,但没有成功: 以下是我尝试过的: /规格/控制器/ipad\u技术\u信息\u控制器\u规格rb before :each do @request.env["devise.mapping"] = Devise.mappings[:admin] @admin = Factor
before :each do
@request.env["devise.mapping"] = Devise.mappings[:admin]
@admin = FactoryGirl.create :admin
sign_in @admin
end
/spec/support/designe.rb
RSpec.configure do |config|
config.include Devise::TestHelpers, :type => :controller
end
/spec/factories/admin.rb
FactoryGirl.define do
factory :admin do
email "abc@abc.com"
password "foobar"
password_confirmation {|u| u.password}
end
end
我的型号不可确认,我所有的控制器规格都不合格
如果我删除之前的过滤器:验证管理员!然后我所有的测试都通过了
有人能帮忙吗?可能的罪魁祸首:确保您没有在控制器规格中明确设置会话 例如,如果您使用的是默认的Rspec scaffold生成器,则生成的控制器规范将传递会话参数
get :index, {}, valid_session
这些正在覆盖Desive的助手设置为与典狱长登录的会话变量。最简单的解决方案是删除它们:
get :index, {}
或者,您可以手动设置其中的典狱长会话信息,而不是使用Deavie的助手。您说“我的模型不可确认”,因此以下内容不适用于您,但这里有一个微妙之处,其他人可能会错过,就像我一样(并浪费了一个小时)
请注意,在上面提到的RSpec/设计方法中,它说如果您的模型中启用了设计“可确认”模块,则您需要致电
@admin.confirm代码>就在登录@admin
之前,或者确保您的工厂在创建@admin
时将确认设置为。如果您不这样做,登录
调用将自动失败,所有后续规范将表现为您未登录。我不知道这是什么原因,但对我来说,解决方案是添加以下方法:
def valid_session
{"warden.user.user.key" => session["warden.user.user.key"]}
end
可在此处找到:
此外,如果你的管理员嵌套在用户工厂中,你需要这样称呼它:登录:user,@admin
,这意味着登录(范围、资源)
添加配置。包括design::Test::ControllerHelpers,type::controller到rails\u helper.rb,它对我很有效