标题是不言自明的。
我尝试过的一切都导致了“未定义的方法”。
澄清一下,我不是在尝试测试辅助方法。我正在尝试在集成测试中使用辅助方法。
您只需要在测试中包含相关的帮助模块即可使这些方法可用:
describe "foo" do
include ActionView::Helpers
it "does something with a helper method" do
# use any helper methods here
真的就这么简单。
对于迟到这个问题的任何人,都可以在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
如果您尝试在视图测试中使用辅助方法,则可以使用以下方法:
before do
view.extend MyHelper
end
它必须在一个describe
块内。
它适用于我在 rails 3.2 和 rspec 2.13
基于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::UrlHelper
和helper.link_to
。
正如您在这里看到的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
祝你好运。
我假设您正在尝试测试辅助方法。为此,您必须将您的规范文件放入spec/helpers/
. 鉴于您正在使用rspec-rails
gem,这将为您提供一个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