我有一个Rails(4.2)帮助器,我试图用Rspec 3进行单元测试。
# app/helpers/nav_helper.rb
module NavHelper
def nav_link(body, url, li_class: "", html: {})
li_class += current_page?(url) ? " active" : ""
content_tag(:li, class: li_class) do
link_to(body, url, html)
end
end
end
# spec/helpers/nav_helper_spec.rb
require 'spec_helper'
describe NavHelper do
describe "#nav_link" do
it "creates a correctly formatted link" do
link = nav_link("test", "www.example.com/testing")
...
end
end
end
运行测试时会抛出以下错误:
Failure/Error: link = nav_link("test", "www.example.com/testing")
NoMethodError:
undefined method `content_tag' for #<RSpec::ExampleGroups::NavHelper::NavLink:0x007fe44b98fee0>
# ./app/helpers/nav_helper.rb:5:in `nav_link'
似乎Rails帮助程序不可用,但我不确定如何包含它们。无论如何,我如何测试使用content_tag
的辅助方法?
更新
添加include ActionView::Helpers::TagHelper
会引发以下错误
uninitialized constant ActionView (NameError)
答案 0 :(得分:1)
您需要在content_tag
中包含NavHelper
方法的帮助器(在本例中为TagHelper
):
module NavHelper
include ActionView::Helpers::TagHelper
# ...
end
最好只包含你需要帮助的东西,因为它可以清楚地告诉你在帮助器中使用的Rails / ActionView的哪些部分。
编辑:为什么这有必要?
当您测试帮助程序时,您将与其他Rails隔离进行测试。这就是为什么RSpec抱怨这种方法不可用 - 它确实不存在!
答案 1 :(得分:0)
问题是我的规范的主线。我将require 'spec_helper'
更改为require 'rails_helper'
,一切正常。
这不是第一次咬我,但它是最难的。