RSpec和设计:无法签署管理员

vda*_*bry 18 rspec devise

我正在将我的标准Rails单元测试迁移到RSpec,我遇到了设计问题.包含设计认证的所有控制器都失败了RSpec.

我尝试按照设计教程在RSpec中签署一个管理员,但没有成功:

https://github.com/plataformatec/devise/wiki/How-To:-Controllers-and-Views-tests-with-Rails-3-(and-rspec)

这是我试过的:

/spec/controllers/ipad_tech_infos_controller_spec.rb

before :each do
    @request.env["devise.mapping"] = Devise.mappings[:admin]
    @admin = FactoryGirl.create :admin
    sign_in @admin
end
Run Code Online (Sandbox Code Playgroud)

/spec/support/devise.rb

RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
end
Run Code Online (Sandbox Code Playgroud)

/spec/factories/admin.rb

FactoryGirl.define do
  factory :admin do
    email "abc@abc.com"
    password "foobar"
    password_confirmation {|u| u.password}
  end
end
Run Code Online (Sandbox Code Playgroud)

我的模型无法确认,我的所有控制器规格都失败了.

如果我删除before_filter:authenticate_admin!然后我的所有测试都通过了

有人可以帮忙吗?

Ian*_*ell 21

可能的罪魁祸首:确保您没有在控制器规范中明确设置会话.

例如,如果您使用默认的Rspec脚手架生成器,则生成的控制器规范会传递会话参数.

get :index, {}, valid_session
Run Code Online (Sandbox Code Playgroud)

这些正在覆盖Devise的助手设置为使用Warden登录的会话变量.最简单的解决方案是删除它们:

get :index, {}
Run Code Online (Sandbox Code Playgroud)

或者,您可以手动设置Warden会话信息,而不是使用Devise的帮助程序.