根据当前路径改变行为的助手的单元测试?
我正在尝试在 Rails 中测试以下辅助方法:
def current_has_class_link(text, path, class_name="selected")
link_to_unless_current(text, path) do
link_to(text, path, :class => class_name)
end
end
我正在尝试进行一个类似这样的测试:
describe "current_has_class_link" do
let(:link_path){ listings_path }
let(:link_text){ "Listings" }
it "should render a normal link if not on current path" do
html = "<a href=\"#{link_path}\">#{link_text}</a>"
current_has_class_link(link_text, link_path).should == html
end
it "should add a class if on the links path" do
# at this point I need to force current_path to return the same as link_path
html = "<a href=\"#{link_path}\" class=\"selected\">#{link_text}</a>"
current_has_class_link(link_text, link_path).should == html
end
end
现在显然我可以为此使用集成测试,但这对我来说似乎有点过分了。有没有办法可以存根 current_page?
以便它返回我需要的内容?
我尝试这样做
ActionView::Helpers::UrlHelper.stub(current_page?({controller: 'listings', action: 'index'})).and_return(link_path)
但这给了我一个我不太理解的错误:
Failures:
1) ApplicationHelper current_has_class_link should add a class if on the links path
Failure/Error: ActionView::Helpers::UrlHelper.stub(current_page?({controller: 'listings', action: 'index'})).and_return(link_path)
RuntimeError:
You cannot use helpers that need to determine the current page unless your view context provides a Request object in a #request method
# ./spec/helpers/application_helper_spec.rb:38:in `block (3 levels) in <top (required)>'
还有其他方法吗?
I'm trying to test the following helper method in rails:
def current_has_class_link(text, path, class_name="selected")
link_to_unless_current(text, path) do
link_to(text, path, :class => class_name)
end
end
I'm trying to make a test which is something like this:
describe "current_has_class_link" do
let(:link_path){ listings_path }
let(:link_text){ "Listings" }
it "should render a normal link if not on current path" do
html = "<a href=\"#{link_path}\">#{link_text}</a>"
current_has_class_link(link_text, link_path).should == html
end
it "should add a class if on the links path" do
# at this point I need to force current_path to return the same as link_path
html = "<a href=\"#{link_path}\" class=\"selected\">#{link_text}</a>"
current_has_class_link(link_text, link_path).should == html
end
end
Now obviously I could use an integration test for this but that seems like overkil to me. Is there a way that I can stub current_page?
so that it returns what I need?
I tried to do
ActionView::Helpers::UrlHelper.stub(current_page?({controller: 'listings', action: 'index'})).and_return(link_path)
But that gives me an error which I don't really understand:
Failures:
1) ApplicationHelper current_has_class_link should add a class if on the links path
Failure/Error: ActionView::Helpers::UrlHelper.stub(current_page?({controller: 'listings', action: 'index'})).and_return(link_path)
RuntimeError:
You cannot use helpers that need to determine the current page unless your view context provides a Request object in a #request method
# ./spec/helpers/application_helper_spec.rb:38:in `block (3 levels) in <top (required)>'
Is there another way?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我遇到了同样的问题,并在测试级别将其存根。
I had the same issue and stubbed it at the test level instead.
在
Test:Unit
中,您可以使用attr_reader
将请求设置为方法。Within
Test:Unit
you can use anattr_reader
to set the request as a method.尝试使用:
Try using: