rspec&devise测试助手问题如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (42)

根据这个来自devise wiki,我应该可以在我的控制器测试中使用一个login_user辅助方法。因此,我在spec目录中有以下内容:

#spec_helper.rb
...
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
  config.extend ControllerMacros, :type => :controller
...

#support/controller_macros.rb
module ControllerMacros    
  def login_user
    before(:each) do
      @request.env["devise.mapping"] = Devise.mappings[:user]
      @user = Factory.create(:user)
      sign_in @user
    end
  end
end

但是,调用助手不起作用:

#requests/some_spec.rb
require 'spec_helper'
describe "GET /guides/edit" do
  login_user     
end

有人能指向我要去的地方吗?测试套件从此起作用。我得到一个未定义的局部变量或方法消息,所以我猜这个模块没有被包含。

提问于
用户回答回答于

我想这种方法存在一些问题。首先,使用的是请求规格,而不是控制器规格,因此该login_user方法不适用config.extend ControllerMacros, :type => :controller。其次,即使能够包含该方法,它最有可能无法工作,因为Devise测试助手专门为控制器/视图测试编写,而不是集成测试。

用户回答回答于

但是为什么不尝试:

#support/controller_macros.rb
module ControllerMacros    
  def login_user
    @request.env["devise.mapping"] = Devise.mappings[:user]
    @user = Factory.create(:user)
    sign_in @user
  end
end

#requests/some_spec.rb
require 'spec_helper'
describe "GET /guides/edit" do
  before(:each) do
    login_user     
  end
end

如果失败 - 也许它找不到@request - 在这种情况下,将它作为变量传递给login_user

看起来你可能需要包含设计测试助手。该RDoc说,你应该有这样的文件:

# spec/support/devise.rb
RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
end

所属标签

可能回答问题的人

  • 天使的炫翼

    17 粉丝531 提问9 回答
  • 优惠活动秘书

    0 粉丝2 提问8 回答
  • 最爱开车啦

    8 粉丝503 提问6 回答
  • 富有想象力的人

    3 粉丝0 提问5 回答

扫码关注云+社区

领取腾讯云代金券