ruby - RSpec:期望一个方法被调用导致该方法实际上没有被调用
问题描述
我有一些可以用非常简单的术语表示的代码:
def method_a(key)
hash = method b(key)
hash.delete(key)
end
def method_b(key)
return { key => 1 }
end
然后像 rspec 测试
it 'calls method_b'
expect(someClass).to receive(:method_b).with(key)
method_a(key)
end
但是,我在 method_a 的第二行中得到一个错误,因为它试图调用delete
一个 nil 对象。当我调试时,我可以看到 method_b 内部的逻辑实际上从未被调用过。它并没有在method_b的某个地方失败,它根本没有调用它。如果我去掉expect
测试中的语句,这个错误就会消失。似乎期望语句导致它跳过对method_b的实际调用,给我留下一个零值而不是我期望的哈希值。
有没有办法阻止它跳过method_b,或者至少在expect语句成功后终止执行,这样我就不会在下一行遇到错误?
解决方案
当您设置消息期望时,它会覆盖原始代码,除非您明确告诉 RSpec 不要:
expect(someClass).to receive(:method_b).with(key).and_call_original
推荐阅读
- heap - Do I have to make the possibilities of position of 4th minimum?
- java - Java trying to build a countdown but integer always returns 0
- sql - 如何比较oracle数据库中的两个日期
- android - Uploading images/files inside a PWA from PWABuilder
- angular - how to access another view and it's feature on separate screen through angular portal?
- r - 如果值出现在使用 dplyr 的分组数据中,则填充非缺失值
- omnet++ - venes_hetvnet 项目路径和变量错误
- python - 如何控制 matplotlib 中的轴标签?
- python - 尝试获取公会角色时出现 Discord API 401 未经授权的错误
- python - Tweepy search_full_archive() missing 2 required positional arguments: 'label' and 'query'