ruby - RSpec 模拟具有嵌套属性的类
问题描述
我对 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")
我怎样才能正确地做到这一点?谢谢!
解决方案
您可能想使用receive_message_chain
:
allow(
client
).to receive_message_chain(:conversations, :configuration, update: "123123123")
但也请查看该页面上的部分:
警告:
链可以任意长,这使得以暴力方式违反德墨忒耳法则非常容易,因此您应该将任何使用 receive_message_chain 视为代码异味。[...]
推荐阅读
- javascript - 我怎样才能在未来的某个特定时间运行一个函数?
- racket - 如何为 DrRacket 插件编写软件测试?
- python - Python & Pandas:将数据附加到新列
- java - 自动化 makemytrip 网站时无法选择正确的元素
- c# - Azure webservice 自动添加 NODE_OPTIONS 环境变量导致 jsreport 抛出 JsReportBinaryException
- function - Arduino IDE 有时输出“功能”未在此范围内声明(不更改任何内容)
- postman - 使用个人令牌作为授权调用 Web 方法时 HTTP 401 未授权
- python - Python vs Airflow pymssql
- sql - 从sql中具有多种模式的多个列中提取特定的字符串值
- django - 部署的 Django 项目不加载静态文件