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

前端之家收集整理的这篇文章主要介绍了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,我的结果应该适当地改变. 这给你一个干净的隔离测试.

猜你在找的Ruby相关文章