如何编写测试以检查此find_or_initialize_by
方法中的initialize
块?
def initialize(document, user)
@document = document
@api = @document.api_version
@template = @document.template
@user = user
@brand = @user.brand
@vars = master_var_hash.extend Hashie::Extensions::DeepFind
template_variables.each do |t|
@document.template_variables.find_or_initialize_by(name: t.name) do |d|
d.name = t.name
d.tag = t.tag
d.box_name = t.box_name
d.designator = t.designator
d.order_index = t.order_index
d.master_id = t.id
d.editable = t.editable
d.editable_title = t.editable_title
d.html_box = t.box.stack.html_box if @api == :v3
d.text = t.name == 'title' ? default_title : user_value(t)
end
end
end
我希望能够测试是否已从类@document
中为TemplateVariables
的{{1}}分配了正确的值。在我的报道报告中,我甚至无法进入TemplateVariable
区块。
我的尺寸测试并没有真正检查我想在这里测试的内容:
find_or_initialize_by
如何编写测试来检查所有这些值并覆盖这些行?
答案 0 :(得分:1)
您可以使用
expect(document).to receive_message_chain(:template_variables, :find_or_initialize_by).exactly(8).times
但这是一团糟,你还必须检查每个电话是否有适当的参数。
我建议将其解压缩为一种方法:
Document#initialize_variables(template_variables)
然后你可以像
一样测试它 expect(document).to receive(:initialize_variables).with(expected_hash)
然后你可以用规范覆盖Document#initialize_variables
并深入测试它的行为。