gpt4 book ai didi

ruby-on-rails - 如何从规范中为助手强制命名空间

转载 作者:行者123 更新时间:2023-12-04 17:00:50 25 4
gpt4 key购买 nike

我正在尝试测试驻留在命名空间中的 View 助手的输出。原始助手位于 app/helpers/admin/events_helper.rb 下。测试位于 spec/helpers/admin/events_helper_spec.rb 并且看起来像这样(简化):

require File.dirname(__FILE__) + '/../../spec_helper'

describe Admin::EventsHelper do

fixtures :events, :users

before(:each) do
@event = events(:one)
@user = users(:one)
end

it "should include link to admin page for user" do
html = helper.event_message(@event)
html.should have_selector("a", :href => admin_user_path(@user))
end

end

可笑的简化助手看起来像这样:
module Admin::EventsHelper
def event_message(event)
link_to(
event.message,
:controller => 'users', :action => 'show', :id => event.user.id)
end
end

当从 Admin 命名空间中的 Controller 调用 event_message 方法时,它会按照预期将链接呈现为“/admin/users/:id”。但是,从规范中调用,它呈现为“/users/:id”,使测试失败。

如何指定正确的命名空间以用于规范中的助手?

谢谢!

最佳答案

我认为问题源于 Rspec(和 Rails 测试框架)处理 Controller 的方式。由于复杂的原因(好吧,我不明白的原因),您在测试时没有获得真正的 ActionController,而是获得了 ActionView::TestCase::TestController 的实例。在使用命名空间时,这种情况下的测试 Controller 没有正确推断实际 Controller 路径,因此它猜测“/users”,这是错误的。

长话短说,虽然可能有更好的方法来做到这一点,但您可以尝试删除由 url_for 调用的 Controller 方法。生成链接:

it "should include link to admin page for user" do
controller.stub(:url_options).and_return(:host=>"test.host", :protocol=>"http://", :_path_segments=>{:controller=>"admin/users", :action=>"show"}, :script_name=>"")
html = helper.event_message(@event)
html.should have_selector("a", :href => admin_user_path(@user))
end

关于ruby-on-rails - 如何从规范中为助手强制命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4173619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com