运行RSpec时无法从视图中访问包含的模块方法

时间:2013-09-25 15:31:30

标签: ruby-on-rails testing rspec

我有一个ProductController,它包含一个带有一些辅助方法的模块:

class ProductController < ApplicationController
  include ProductItemHelper

  def item
    @product = Product.find_by_id(params[:id])
  end
end

,模块如下所示:

module ProductItemHelper

  def seoify(text)
    unless text.blank?
      "#{text.titleize} | "
    end
  end

end

然后在我看来,我调用了这样的辅助方法:

content_for :meta_title do
  "#{seoify(@product.title)}"
end

在我在任何环境中运行应用程序时应该正常工作,但是当我尝试在RSpec测试中访问该页面时,它会命中控制器和视图,但出现错误:

undefined method `seoify' for #<#<Class:0x0000000a6a0a18>:0x0000000b726e50>

我无法理解为什么。我已经测试过从控制器调用方法,这很好用,@ product.title在整个视图的不同点都有几种不同的方法应用于它,所以我希望能够从视图中引用模块方法。

我是否缺少某些RSpec配置以使其可访问?

2 个答案:

答案 0 :(得分:0)

尝试使用内置控制器的类方法helper来要求并包含帮助程序

class ProductController < ApplicationController
  helper :product_item

http://apidock.com/rails/AbstractController/Helpers/ClassMethods/helper

答案 1 :(得分:0)

this question接受的答案让我走上正轨,我只需要将方法包含在我的spec目录中的帮助文件中。