我有一个视图,它会调用一个帮助器。在我的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
知道测试消息期望的内容吗?
答案 0 :(得分:0)
在我的观点规范中,我通常会写
expect(view).to receive(:chart_tag).with(:pie)