如何在不创建大量双精度的情况下测试长链方法的参数

时间:2015-09-21 16:07:42

标签: rspec

我有一个Active Record查询,如下所示:

user.templates.where(id: @template_id).joins(:another_record).pluck('templates.id').uniq

但我只想测试where是否使用正确的ID进行调用。有没有办法做到这一点,而不必创建几个只响应其余方法的双打。

基本上我想要像

这样的东西
expect_any_instance_of(User).to receive_message_chain('templates.where').with(id: target_id).and_return(a_double_that_returns_another_double_that_responds_to_anything)

1 个答案:

答案 0 :(得分:0)

您需要Null Object Double

a_double_that_returns_another_double_that_responds_to_anything = double.as_null_object
expect_any_instance_of(User).to receive_message_chain('templates.where').with(id: target_id).and_return(a_double_that_returns_another_double_that_responds_to_anything)

作为旁注,我认为这项测试没有任何好处。做一个连接到真实数据库的集成测试并检查你的查询是否真的有效并且不只是调用一些AR方法会好得多。

如果您可以向我展示一下您正在测试的内容,我可以给出更周到的建议。