如何从Rails中的RSpec测试中调用app helper方法?

时间:2013-01-18 15:26:58

标签: ruby-on-rails rspec

标题是自我解释的。

我尝试的所有内容都导致了“未定义的方法”。

为了澄清,我不是要尝试测试辅助方法。我试图在集成测试中使用辅助方法。

6 个答案:

答案 0 :(得分:27)

您只需在测试中包含相关的辅助模块即可使方法可用:

describe "foo" do
  include ActionView::Helpers

  it "does something with a helper method" do
    # use any helper methods here

它真的很简单。

答案 1 :(得分:8)

对于迟到这个问题的人,可在Relish网站上回答。

require "spec_helper"

describe "items/search.html.haml" do
  before do
    controller.singleton_class.class_eval do
      protected
      def current_user
        FactoryGirl.build_stubbed(:merchant)
      end
      helper_method :current_user
    end
  end

  it "renders the not found message when @items is empty" do
    render

    expect(
      rendered
    ).to match("Sorry, we can't find any items matching "".")
  end
end

答案 2 :(得分:4)

如果您尝试在视图测试中使用辅助方法,则可以使用以下内容:

before do
  view.extend MyHelper
end

必须位于describe区块内。

它适用于rails 3.2和rspec 2.13

答案 3 :(得分:1)

基于Thomas Riboulet's post on Coderwall

在spec文件的开头添加:

def helper
  Helper.instance
end

class Helper
  include Singleton
  include ActionView::Helpers::NumberHelper
end

然后使用helper.name_of_the_helper调用特定帮助程序。

此特定示例包含ActionView's NumberHelper。我需要UrlHelper,所以我做了include ActionView::Helpers::UrlHelperhelper.link_to

答案 4 :(得分:0)

正如您在此处https://github.com/rspec/rspec-rails所见,您应该使用以下命令初始化spec /目录(规范所在的位置):

$ rails generate rspec:install

这将使用选项

生成rails_helper.rb
config.infer_spec_type_from_file_location!

最后在helper_spec.rb中需要新的rails_helper而不是'spec_helper'。

require 'rails_helper'
describe ApplicationHelper do
  ...
end
祝你好运。

答案 5 :(得分:-1)

我假设您正在尝试测试辅助方法。为此,您必须将您的spec文件放入spec/helpers/。鉴于您正在使用rspec-rails gem,这将为您提供一个helper方法,允许您在其上调用任何帮助方法。

the official rspec-rails documentation中有一个很好的例子:

require "spec_helper"

describe ApplicationHelper do
  describe "#page_title" do
    it "returns the default title" do
      expect(helper.page_title).to eq("RSpec is your friend")
    end
  end
end