1

css クラス (選択または選択解除) を決定するアプリケーション ヘルパーと、アプリケーション ヘルパーの上部にあるナビゲーション バーのリンク アドレスがあります。

コントローラーをテストすると、navbar に関する大量のエラーが発生します (変数は nil を返します)。ナビゲーションバーは個々のコントローラーとは関係なく、すべてのページに表示されるため、これが最も簡単な方法のようです。

アプリケーションヘルパーで:

def navbar_method(category)
c = Category.find_by_name(category)
    children = c.children.map {|child| child.name}
if category == "All"
    if params[:id] == category || params[:category] == category
        "on"
        else
        "off"
        end
else
    if params[:id] == category || children.include?(params[:id]) || params[:category] == category || children.include?(params[:category])
        "on"
        else
        "off"
    end
end

これは、nav_link メソッドを使用する Navbar ビューのスニペットです。これは、nav クラスと同様に、私が作成した別のヘルパー メソッドです。これは水平ドロップダウン メニューです。

layouts/application.html.erb:

<li id="Home" class="<%= nav_class("All") %>"><%= nav_link("All") %>
    <ul>
    </ul></li>
    <li id="Writing" class="<%= nav_class("Writing") %>"><%= nav_link("Writing") %>
    <ul>
        <li class="<%= nav_class("Educational") %>"><%= nav_link("Educational") %>

このメソッドのすべてが nil になるため、次のようにしました。

def navbar_method(category)
unless Rails.env.test?
c = Category.find_by_name(category)
#see above
end
end

どう思いますか?わかった?良くないですよ?

NOT OK に 1 票を獲得したので、もう少し説明しようと思いました。何らかの理由で、私が含める可能性のあるフィクスチャにもかかわらず、カテゴリはテストで nil を返しています...ナビゲーションバーをテストするために広範な統合テストを行うことができると考えました...

4

1 に答える 1

1

それは良い考えではありません。

機能テストでは、ユーザーの要求とほぼ同じ環境を再現する必要があります。なぜヘルパーが機能しないのですか?

また、ヘルパーをテストするためにいくつかのユニットテストを設定しましたか?おそらく、ヘルパー自体はバグがあります。

于 2010-02-20T09:45:22.447 に答える