【问题标题】:RSpec mock a class with nested attributesRSpec 模拟具有嵌套属性的类
【发布时间】:2021-07-15 22:04:12
【问题描述】:

我对 Ruby 和 RSpec 非常陌生,但在尝试模拟类中的属性链时遇到了麻烦:

client.conversations.configuration.update(sid: user.sid)

我已经像这样嘲笑客户了:

let(:client) { class_double(Service::ClientFactory) }

但是,这是我使用 receive 方法尝试并失败的方法,它不起作用。

  allow(client).to receive(conversations.configuration.update).and_return("123123123")

我怎样才能正确地做到这一点? 谢谢!

【问题讨论】:

  • 您可以为此使用stub_chain,但最好不要存根...为什么尝试存根?
  • 为什么是一个很好的问题。我假设你已经单独测试了client.conversationsconversations.configurationconfiguration.update(如果你没有测试过)那么真的需要测试吗?

标签: ruby unit-testing rspec


【解决方案1】:

您可能想使用receive_message_chain

allow(
  client
).to receive_message_chain(:conversations, :configuration, update: "123123123")

但也请查看该页面上的部分:

警告:

链条可以任意长,这使得违反得墨忒耳法则变得非常轻松 以暴力的方式,所以你应该考虑任何使用 receive_message_chain 的代码气味。 [...]

【讨论】:

  • 谢谢,我会考虑的?
猜你喜欢
  • 2018-04-09
  • 2012-08-12
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多