rspec&设计测试助手

mar*_*ark 18 rspec ruby-on-rails devise ruby-on-rails-3

根据设计维基的这个,我应该能够在我的控制器测试中使用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
...
Run Code Online (Sandbox Code Playgroud)

#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
Run Code Online (Sandbox Code Playgroud)

但是调用帮助程序不起作用:

#requests/some_spec.rb
require 'spec_helper'
describe "GET /guides/edit" do
  login_user     
end
Run Code Online (Sandbox Code Playgroud)

有人能指出我出错的地方.测试套件就是这样工作的.我得到一个未定义的局部变量或方法消息,所以我猜这个模块没有包含在内.

Rails 3.0.7 rspec 2.6.0设计1.3.4

回溯

zet*_*tic 18

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

看看David Chelimsky 对这个SO问题回答,这可能会有所帮助.