30

标题是不言自明的。

我尝试过的一切都导致了“未定义的方法”。

澄清一下,我不是在尝试测试辅助方法。我正在尝试在集成测试中使用辅助方法。

4

6 回答 6

29

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

describe "foo" do
  include ActionView::Helpers

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

真的就这么简单。

于 2013-01-18T16:07:33.910 回答
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
于 2014-01-31T22:42:40.287 回答
4

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

before do
  view.extend MyHelper
end

它必须在一个describe块内。

它适用于我在 rails 3.2 和 rspec 2.13

于 2013-08-17T01:25:55.500 回答
1

基于Thomas Riboulet 在 Coderwall 上的帖子

在您的规范文件的开头添加以下内容:

def helper
  Helper.instance
end

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

然后用 . 调用特定的助手helper.name_of_the_helper

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

于 2014-06-26T10:15:27.367 回答
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

祝你好运。

于 2014-06-24T14:45:32.530 回答
-2

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

官方rspec-rails文档中有一个很好的例子:

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
于 2013-01-18T15:36:39.950 回答