Rspec 无法识别 Rails 的 content_tag
Rspec Does Not Recognize Rails's content_tag
我有一个 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)
您需要在 NavHelper
中包含包含 content_tag
方法的帮助程序(在本例中为 TagHelper
):
module NavHelper
include ActionView::Helpers::TagHelper
# ...
end
最好只包含使事情正常运行所需的助手,因为它可以清楚地表明您在助手中使用了 Rails/ActionView 的哪些部分。
编辑:为什么这是必要的?
当您测试助手时,您是在将它与 Rails 的其余部分隔离开来进行测试。这就是为什么 RSpec 抱怨该方法不可用 - 它实际上不存在!
这个问题是我的规范的首要问题。我将 require 'spec_helper'
更改为 require 'rails_helper'
并且一切正常。
这不是第一次咬我,但这是最难的。
我有一个 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)
您需要在 NavHelper
中包含包含 content_tag
方法的帮助程序(在本例中为 TagHelper
):
module NavHelper
include ActionView::Helpers::TagHelper
# ...
end
最好只包含使事情正常运行所需的助手,因为它可以清楚地表明您在助手中使用了 Rails/ActionView 的哪些部分。
编辑:为什么这是必要的?
当您测试助手时,您是在将它与 Rails 的其余部分隔离开来进行测试。这就是为什么 RSpec 抱怨该方法不可用 - 它实际上不存在!
这个问题是我的规范的首要问题。我将 require 'spec_helper'
更改为 require 'rails_helper'
并且一切正常。
这不是第一次咬我,但这是最难的。