首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >rspec &设计测试助手

rspec &设计测试助手
EN

Stack Overflow用户
提问于 2011-06-20 00:33:31
回答 4查看 18.1K关注 0票数 18

根据devise wiki中的this,我应该能够在我的控制器测试中使用login_user助手方法。相应地,我在spec目录中有以下内容:

代码语言:javascript
复制
#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
...

代码语言:javascript
复制
#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

但是,调用helper并不起作用:

代码语言:javascript
复制
#requests/some_spec.rb
require 'spec_helper'
describe "GET /guides/edit" do
  login_user     
end

有人能指出我哪里错了吗?测试套件就是从这个开始的。我得到了一个未定义的局部变量或方法消息,所以我猜模块没有被包括在内。

Rails 3.0.7 rspec 2.6.0设计1.3.4

backtrace

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-20 01:22:05

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

看看David Chelimsky的answer to this SO question,它可能会有所帮助。

票数 18
EN

Stack Overflow用户

发布于 2011-06-20 00:53:25

我不能肯定的回答...但对我来说,代码的味道是在helper内部定义的“the (:each)”。你为什么不试试:

代码语言:javascript
复制
#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

代码语言:javascript
复制
#requests/some_spec.rb
require 'spec_helper'
describe "GET /guides/edit" do
  before(:each) do
    login_user     
  end
end

如果失败-可能只是找不到@request -在这种情况下,将其作为变量传递给login_user

编辑:

看起来您可能需要包含devise测试助手。rdoc说你应该有这个文件:

代码语言:javascript
复制
# spec/support/devise.rb
RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
end

不确定这是否与你已经在spec_helper.rb中获得的不同……在我看来很像。

票数 4
EN

Stack Overflow用户

发布于 2011-09-08 23:43:19

我和Rails 3.0.10RSpec 2.6.0 devise 1.3.4 spork 0.9.0.rc9在我的控制器规格上也有同样的问题,我已经把config. extend改成了config.include和它的工作!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6403650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档