0

我正在使用 HAML 助手来绘制菜单

module ApplicationHelper
  def draw_menu
    items = %w[
      item1
      item2
    ] # community

    capture_haml do
      haml_tag :nav, :class => "main-menu" do
        haml_tag :ul do
          items.each do |item|
            css_class = nil
            css_class = "first-item" unless item != items.first
            css_class = "last-item" unless item != items.last

            haml_tag :li, :class => css_class do
              haml_concat link_to t("nav.#{item}")
            end
          end
        end
      end

      haml_tag :div, :class => "clearize"
    end
  end
end

我正在尝试测试它(我想匹配预期的输出/<nav class='main-menu'>\s*<\/nav><div class='clearize'><\/div>/

我实际上做的是

require "spec_helper"

describe ApplicationHelper do

  before(:all) do
    init_haml_helpers
  end

  it "should draw a menu" do
    draw_menu().should_not be_empty
  end

end

但它不断收到以下错误:

1) ApplicationHelper should draw a menu
   Failure/Error: draw_menu().should_not be_empty
   ActionController::RoutingError:
     No route matches {}
   # ./app/helpers/application_helper.rb:20:in `block (5 levels) in draw_menu'
   # ./app/helpers/application_helper.rb:19:in `block (4 levels) in draw_menu'
   # ./app/helpers/application_helper.rb:14:in `each'
   # ./app/helpers/application_helper.rb:14:in `block (3 levels) in draw_menu'
   # ./app/helpers/application_helper.rb:13:in `block (2 levels) in draw_menu'
   # ./app/helpers/application_helper.rb:12:in `block in draw_menu'
   # ./app/helpers/application_helper.rb:11:in `draw_menu'
   # ./spec/helpers/application_helper_spec.rb:10:in `block (2 levels) in <top (required)>'

为什么? 我怎样才能让它按预期工作?

谢谢!

4

1 回答 1

0

如果您调用link_to仅传递一个字符串作为该参数,那么该字符串将用作链接文本。链接的目标只是由当前动作和控制器给出:(url_for底层助手)只是将您给出的参数与构成当前动作的参数合并。这就是为什么

link_to 'something', :action => :an_action

生成一个链接到an_action控制器渲染视图的方法。

在辅助规范中,这个环境不存在:没有当前的动作或控制器,所以这不起作用

于 2012-07-16T08:46:22.487 回答