Ruby 更好的失败消息,用于断言集合中多个对象的属性
为了断言对象具有预期属性,我提出了自定义方法Ruby 更好的失败消息,用于断言集合中多个对象的属性,ruby,rspec,Ruby,Rspec,为了断言对象具有预期属性,我提出了自定义方法 def be_active_sales_order_with(quantity) expected = { :order_type => "sales", :activated_at => be_within(1.minute).of(Time.current), :quantity => quantity } have_attributes(expected) end 当上述方法与一个对象一
def be_active_sales_order_with(quantity)
expected = {
:order_type => "sales",
:activated_at => be_within(1.minute).of(Time.current),
:quantity => quantity
}
have_attributes(expected)
end
当上述方法与一个对象一起使用时,失败消息提供了格式清晰的差异,即属性的值不同于预期值
失败消息:
预计#具有属性{:订单类型=>“销售”,:激活的{u at=>(在2019-11-26 15:56:17的300范围内),:数量=>3}但具有属性{:订单类型=>“销售”,:激活的{u at=>2019-11-24 15:56:17.000000000,:数量=>3}差异:
@@-1,5+1,5@@@br> :订单类型=>销售,
-:在=>处激活(在2019-11-26 15:56:17的300范围内),
+:激活时间=>2019-11-2415:56:17.000000000,
:数量=>3
it "creates single order" do
# configuration for single order
orders = create_order.call(quantity: 3)
expect(orders.only).to be_active_sales_order_with(3)
end
但对于可以创建多个订单的情况,如果不调试失败的测试,则很难读取失败消息
it "creates multiple orders" do
# configuration for multiple order
orders = create_order.call(quantity: 3)
expect(orders).to contain_exactly(
be_active_sales_order_with(3),
be_active_sales_order_with(3),
be_active_sales_order_with(3)
)
end
失败消息:
预期包含的集合:[(具有属性{:订单类型=>“销售”,:激活的\>日期=>(在2019-11-26 15:56:17的300范围内),:数量=>3})]实际收款包含:[订单id:885385454,客户id:367693892,主题:无,创建时间:2019-…,段键:“9bf937d687eaff19”,库存id:无,通知人:无,使用折扣:假,用户id:548091186]
缺少的元素是:[(具有属性{:订单类型=>“销售”,:激活的\>日期=>(在2019-11-26 15:56:17的300范围内),:数量=>3})]
额外的元素是:[订单id:885385454,客户id:367693892,主题:nil,创建时间:2019-…,段键:“9bf937d687eaff19”,库存id:nil,通知人:nil,使用折扣:false,用户id:548091186]
如何构建更具可读性的消息,在预期和实际对象属性之间提供可读性差异当前差异是什么样子?@lacostenycoder,使用当前失败消息更新。我们可以看看这个问题