标题是自我解释的。
我尝试的所有内容都导致了“未定义的方法”。
为了澄清,我不是要尝试测试辅助方法。我试图在集成测试中使用辅助方法。
答案 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::UrlHelper
和helper.link_to
。
答案 4 :(得分:0)
正如您在此处https://github.com/rspec/rspec-rails所见,您应该使用以下命令初始化spec /目录(规范所在的位置):
$ rails generate rspec:install
这将使用选项
生成rails_helper.rbconfig.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