ruby - 在 RSpec 中模拟集合匹配器
问题描述
我有一个库,它使用以下表达式检查对象是否是类的实例
ClassName === object
有没有办法编写一个double
可以模拟这个的方法,这样上面的表达式(我的双精度将替换表达式中的对象)返回 true
解决方案
虽然ClassName === object
等价于object.kind_of?(ClassName)
,但 Ruby 检查对象的类而不调用任何object
' 方法。这意味着object
在这种情况下不能做任何事情来被识别为ClassName
实例,除非它实际上是ClassName
(或其子类/包含的模块之一)的实例。
然而,ClassName === object
仍然是一个方法调用。所以你可以===
做的就是将方法存根ClassName
:
allow(ClassName).to receive(:===).with(object).and_return(true)
以上甚至适用于:
case object
when ClassName
# ...
end
它只是调用ClassName === object
.
推荐阅读
- django - Django图像上传不发布
- powerapps - 我需要更改电源应用程序中的日期格式
- stm32 - STM32 HAL 循环停滞
- azure-data-factory - 映射数据流可以使用参数化 Parquet 数据集吗?
- python - 我可以在哪里托管我的 whatsapp 硒自动化?
- ios - Swift Dispatch Main 同步使 UIView 动画混乱
- mongodb - MongoTemplate.getCollectionNames 和 MongoTemplate,collectionExists 方法在连接到 Azure Cosmos DB 时抛出 StringIndexOutOfBoundsException
- python - Python:dict的键/值对子集确定要调用的函数
- javascript - 提供角度的功能
- python - ValueError:条件预期的布尔数组,而不是对象