ruby-on-rails - RSpec - 检查方法是否被进一步调用(向上?)调用堆栈
问题描述
我一直在使用内置的 Rails 测试套件,现在正在使用 RSpec 进行测试。我试图弄清楚是否在调用另一个方法的过程中调用了一个方法。例如,我的 update_service.call 方法被一个对象调用。update_service 调用 manage_service.call 方法。我正在尝试测试是否曾调用过 manage_service.call 方法。
expect(@update_service).to receive(:call).with(object).at_least(:once)
expect(@manage_service).to receive(:call).with(object.id).at_least(:once)
@update_service.call(encounter)
使用此设置,我遇到以下失败:
Failures:
1) UpdateService should call manage_service
Failure/Error: expect(@manage_service).to receive(:call).with(object.id).at_least(:once)
(#<ManageService:0x00007ffaf8c76190 @sdi=ServiceDI>).call(1)
expected: at least 1 time with arguments: (1)
received: 0 times
# ....
我不确定我在这里缺少什么。
解决方案
RSpec 允许您使用any_instance_of
匹配器集进行设置。如果您需要执行这种特定类型的测试并且无法通过 DI 手动指定实例,这将很有用。
expect_any_instance_of(Widget).to receive(:name).and_return("Wobble")
看这里
推荐阅读
- android - 我无法运行我的 Android 应用程序(react-native)
- kubernetes - gitlab + GKE + AutoDevops 自动部署部署失败。错误:资源/名称形式的参数必须有一个资源和名称。如何发现错误?
- javascript - 转换 javascript 对象的值以删除数组内的重复项
- python - python中是否有等效的PlayEvolution?
- javascript - 在 React 的 .env 文件中隐藏 API 密钥是最佳实践吗
- asp.net-core - AspNetCore 2.2 as API - 如何使用身份方法注销?
- c# - 如何防止 wpf 应用程序的多个实例?
- c# - 我需要按未知数量的字段对对象列表进行排序
- ruby-on-rails - 如何验证扩展名“pdf”
- javascript - 在 useEffect 中更改状态不会更改界面