我是一个老程序员,但是对ruby还是陌生的,并且陷入了我需要扩展rspec测试的现有代码库中。
需要测试的代码使用MongoDB(蒙古包),并且具有类似于以下的模式:
objects = Database::MyTable.active.where(object_id: object_id).to_a
我希望我的rspec代码提供在测试中经过硬编码的objects
。我该怎么办?
由于方法的“链”,存根有点笨拙,但可以做到。
allow(Database::MyTable).to(
receive(:active).and_return(double(
where: [{ id: 1 }, { id: 2 }]
))
)
我们已经存根active
以返回我们存根了double
的模拟(a where
。
文档:rspec-mocks
PS:还有许多其他方式可以写这些存根,有些在客观上更好,有些在主观上更好。还有一些方法可以重构代码以使存根变得更容易。
PPS:欢迎使用红宝石!
我会将检索数据(包括您提到的行)的代码分为一个方法,将对数据进行消耗/操作的代码分为另一个方法,然后模拟整个检索方法。这样,您就不必为所使用的确切查询感到困惑。