2016-07-18 3 views
-1

このコードはハッシュ全体をループして出力しますが、ハッシュのサイズが4MBを超えると最初の10個の要素だけを反復処理します。Ruby gemのビュー内のループのTest_helper

<% sections_content.each do |title, summary| %> 
    <tr> 
     <td style="border-bottom: 1px solid #eeeeee;"><%= raw title %></td> 
    </tr> 
    <tr> 
     <td><%= raw summary %></td> 
    </tr> 
    <% break if ObjectSpace.memsize_of(sections_content) > 4194304 && index == 9 %> 
<% end %> 

Iは、インデックスが9に等しい場合、それは最初の10個の要素の上にループを意味し、ループの切断を確実にするためにテストを書きたいです。

私はこのような何かを考えています:

require 'test_helper' 
test "should size> 400" do 
    assert_equal(9, index, [msg]) 
end 

テストは動作しません。 ユニットテストこの正常にするために、このコードの[sic]

答えて

1

をテストするためのより良い方法のためのすべてのヘルプは、あなたが最初にテスト可能それがよりにする必要があります。関連するコードをヘルパーメソッドに移動し、そのメソッドをテストします。あなたのロジックをビューの中に詰め込むだけではありません。言い換えれば

、(おそらくどこか./app/helpers/中)ヘルパーメソッドを作成します。

def section_summaries(sections_content) 
    sections_content.map.with_index do |title, summary, index| 
    # Generate HTML code... 
    break if ObjectSpace.memsize_of(sections_content) > 4194304 && index == 9 
    end 
end 

次に、あなたのビューでは、ヘルパーメソッドを呼び出す:

<%= section_summaries(sections_content) %> 

そして、あなたの仕様では、テストヘルパーメソッド直接:

require 'test_helper' 
test "only show first 10 summaries for large dataset" do 
    assert_equal(10, section_summaries(sections_content).length) 
end 

これは大まかなガイドです。実際の実装は若干異なる場合があります。ここで取り組むべきポイントは、ユニットテスト容易性のためにロジックをメソッド/クラスに分離しようとすることです。

+0

ありがとうございます、これは宝石の通知宝石です、ファイルの構造は少し異なります。 ここにソースコードがあります:https://github.com/smartinez87/exception_notification あなたが見てみると、私はそれをたくさんいただきたいです –

+0

私は[このファイル](https:// github .com/smartinez87/exception_notification/blob/c745491a10c193cfba43d44ba00d1dd39f5be71c/lib/exception_notifier/views/exception_notifier/exception_notification.html.erb)?違いはありません。とにかくそのファイルをオーバーライドしているので、好きなヘルパーメソッドを追加できます。 –

+0

これは言っていますが、あなたの実装がちょっと奇妙なのはわかります...なぜ、@セクションだけを最大10個(またはそれ以上)の大きな要素に制限し、ビューファイルを残しておきましょうか? –