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

标签 ruby-on-rails ruby-on-rails-3 devise rspec2

我的助手代码看起来像这样(顺便说一句,工作正常):

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'

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

编辑:为了提供更多信息,我的 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) (和其他)测试助手。它们不会添加您在 Controller / View 代码中实际使用的帮助程序。

最佳答案

我认为 rspec 的理念是尽可能完全隔离地测试 View /助手/模型。所以在这种情况下,我会删除 user_signed_in?并返回 falsetrue我的结果应该适当改变。
这为您提供了一个干净的隔离测试。

关于ruby-on-rails - 使用 Rspec 2 和 Devise 测试 Rails 3 中的助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663897/

相关文章:

ruby-on-rails - 如何在RefineryCMS 测试中登录用户?

ruby-on-rails - 具有动态哈希的 Rails update_attributes

sql - Rails has_one 和 belongs_to 加入

ruby-on-rails - :url, :action, 之间的 RoR 差异:form_for 中的方法

ruby-on-rails - 链接数据方法设置为删除但错误引用 get 没有路由匹配 [GET]

ruby-on-rails - 我可以使用 chartkick 的图表链接到其他 URL 吗?

Css 文本内阴影的扭曲! (rails 3 中的表单提交按钮)

ruby-on-rails-3 - ActiveAdmin 如何与现有 Controller 配合使用

ruby-on-rails - 如何设计 current_user 工作?

ruby-on-rails-3 - CanCan 错误 'undefined method role?' 与设计