Test_helper在Ruby gem

时间:2016-07-18 14:40:51

标签: ruby-on-rails ruby testing rubygems

此代码循环并打印整个散列,但如果散列的大小大于4MB,则仅迭代前十个元素。

<% 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 %>

我想为它编写一个测试,以确保当索引等于9时循环中断,这意味着它会遍历前十个元素。

我在考虑这样的事情:

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

测试不起作用。任何有关测试此代码的更好方法的帮助[原文如此]

1 个答案:

答案 0 :(得分: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

这只是一个粗略的指南;您的实际实施可能略有不同。要点的重点是尝试将逻辑分离为单元可测试性的方法/类。