3

Rails 3.2.8 コントローラ テストでは、またはメソッドassert_selectを使用してビューにレンダリングされたエスケープされていないフィールドの内容を制御するために を使用したいと思います。raw#html_safe

<div id="summary">
    <%= raw @doc.summary %>
</div>

しかし、私のテストでは、これらのアサーションは両方とも失敗します:

# Fixture loading in doc variable, get :show, assert_response ...
assert_select('#summary', doc.summary)
assert_select('#summary', doc.summary.html_safe)

私の要約が次のようなもの<p>Stuff:</p><ul><li>Stuff1</li><li>Stuff1</li></ul>である場合、テストは両方の行について次のことを教えてくれます:

<"<p>Stuff:</p><ul><li>Stuff1</li><li>Stuff2</li></ul>">
expected but was
<"Stuff:\n  \n    Stuff1\n    Stuff2">

\nテスト モードでは、HTML タグの代わりに、CLI 表示をエスケープするかのように、ビューをレンダリングしているように見えます。

しかし、サーバーを起動してブラウザで自分のページを表示すると、この部分は HTML タグでレンダリングされ、\n.

コントローラー テスト レンダリング エンジンのバグですか? それを避ける方法を知っていますか?

4

1 に答える 1

3

解決策を見つけました:

assert_select('#summary', :html => doc.summary)

このように、DOMで選択されたコンテンツに適用された変換はすべて、比較前の2番目の引数にも適用されます。


注意:ただし、フィクスチャの書き方には注意してください。

次の構文:

doc:
  summary: |
    <p>Stuff:</p><ul><li>Stuff1</li><li>Stuff2</li></ul>

\nと比較して、assert_selectから最後の追加を取得します。

doc:
  summary: <p>Stuff:</p><ul><li>Stuff1</li><li>Stuff2</li></ul>

なぜこれが発生するのかわかりませんが、アサートが失敗します。

于 2012-09-19T15:20:05.377 に答える