从视图调用时,期望辅助方法调用什么类?

时间:2015-02-06 09:56:43

标签: ruby-on-rails rspec rails-cells

我有一个视图,它会调用一个帮助器。在我的rspec测试中,我想检查是否使用适当的属性调用了这个帮助器。

<div class="chart">
  <%= chart_tag(:pie, {css: 0.1, javascript: 0.3, ruby: 0.6}) %>
</div>

我不想测试chart_tag是否呈现正确的HTML;它是一个复杂的帮助器,可以设置各种data-属性;它设置了高级参数。这个方法本身已经过适当的测试。

我想测试类似的东西:

expect(TemplateClass::SomeHelper).to receive(:chart_tag).with(:pie)

我不知道在哪里设定期望:我不知道细胞是如何呈现的。它似乎利用了rails&#39;渲染堆栈,但对我来说这也是一个不熟悉的领域。

我是通过cells来调用的,因此通用rspec view不适用于此。

在单元格中,helper包含了助手,据我所知,这是rails method。但是遵循该代码,仍然没有通过代理,类或模块告诉我视图中包含的内容。

说明堆栈/代码的一部分:

class AnalysisCell < Cell::Rails
  helper ChartHelper

  def chart(params)
    @type = params[:type] || :pie
    @dataset = params[:dataset] || {}
    render # Cells will now, magically, parse and process app/cells/analysis/chart.html.erb
  end
end

app/cells/analysis/chart.html.erb

<%= debugger %>
<%= chart_tag(:pie, {css: 0.1, javascript: 0.3, ruby: 0.6}) %>

app/helpers/chart_helper.rb

module ChartHelper
  def chart_tag(type, dataset)
  end
end

当进入调试器时,我可以从内部检查状态 erb

self.class #=> #<Class:0x007f9eef0215a8>
self._helpers #=> NoMethodError Exception: undefined method `_helpers
self.methods.sort #=>
# [...
# :cell_for,
# :chart_tag,
# :check_box_tag,
# ...]
# self.method(:chart_tag).owner #=> ChartHelper

但测试失败了received: 0 times with any argument

it 'renders a chart' do
  expect(ChartHelper).to receive(:chart_tag) #.with(:pie, {})
  render_cell(:analysis, :chart, type: :pie, dataset: {})
end

知道测试消息期望的内容吗?

1 个答案:

答案 0 :(得分:0)

在我的观点规范中,我通常会写

expect(view).to receive(:chart_tag).with(:pie)