ruby - 如何为实例化其他类对象的方法编写rspec
问题描述
我想在 ruby 中为 A 类的测试方法编写 rspec
class A
def test
b = B.new
b.run!
end
end
class B
def run!
return 1
end
end
有人可以告诉我如何使用模拟来做到这一点
解决方案
你可以这样做:
let(:a) { A.new }
let(:b_mock) { instance_double(B, run!: 'result') }
describe '#test'
it 'instantiates B and calls #run!' do
allow(B).to receive(:new).and_return(b_mock)
a.test
expect(b_mock).to have_received(:run!)
end
end
本质上,您想“窥探”创建的实例,并检查它是否已收到您期望的方法。
您也可以只测试A#test
返回1
,但是,这样的测试确实在验证 的行为B#run!
,这意味着您的测试是耦合的。
推荐阅读
- javascript - 无法将 PIXI js 作为模块导入
- php - Nginx Php5.6 异常长 TTFB > 2 mins
- html - Django页面,刷新页面时丢失ChartJs渲染图
- vue.js - 我们如何在 vuejs 的 javascript 文件中定义的 vuejs 的 html 文件中调用函数而不在 html 文件中创建按钮?
- graph - 如何查找 amcharts 4 图表中的条数?
- nginx - 如何在github上自动部署flask app
- php - 查询一对一关系的正确方法?(Laravel 7)
- python - 使用 pd.merge 加入数据帧的问题
- python - 如何将文件从谷歌云加载到工作
- html - html5 或 css '智能文本流' 将句子或段落均匀分布在同样宽的行上?