ruby-on-rails – 使用Rspec 2和Devise在Rails 3中测试助手

我的帮助程序代码看起来像这样(并且工作正常btw):
module ProvidersHelper
  def call_to_review(provider)
    if user_signed_in? && review = Review.find_by_provider_id_and_user_id(provider.id,current_user.id)
      link_to "Edit Your Review",edit_provider_review_path(provider,review),:class => "call_to_review"
    else
      link_to "Review This Provider",new_provider_review_path(provider),:class => "call_to_review"
    end
  end
end

不幸的是,当我运行测试时,会产生以下错误

undefined method `user_signed_in?' for #<ActionView::Base:0x00000106314640>
 # ./app/helpers/providers_helper.rb:3:in `call_to_review'

显然,当rspec运行测试时,Devise :: Controllers :: Helpers没有包含在我的助手中.任何可能有助于这项工作的建议?

编辑:提供更多的信息,我的spec_helper有这样的:

config.include Devise::TestHelpers,:type => :controller
config.include Devise::TestHelpers,:type => :view
config.include Devise::TestHelpers,:type => :helper

(可悲的是,我无法使用它:type => [:controller,:view,:helper])

无论如何,我相信这些行将sign_in(scope,object)(和其他)测试助手添加到您的测试中.他们不会添加您在控制器/视图代码中实际利用的帮助器.

解决方法

我认为rspec的理念是尽可能全面地测试视图/帮助者/模型.所以在这种情况下,我会存根user_signed_in?并返回false或true,我的结果应该适当地改变. 这给你一个干净的隔离测试.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...