如何在rspec(初学者)中模拟mongodb

问题描述 投票:1回答:2

我是一个老程序员,但是对ruby还是陌生的,并且陷入了我需要扩展rspec测试的现有代码库中。

需要测试的代码使用MongoDB(蒙古包),并且具有类似于以下的模式:

 objects = Database::MyTable.active.where(object_id: object_id).to_a

我希望我的rspec代码提供在测试中经过硬编码的objects。我该怎么办?

ruby mongodb rspec mongoid
2个回答
0
投票

由于方法的“链”,存根有点笨拙,但可以做到。

allow(Database::MyTable).to(
 receive(:active).and_return(double(
   where: [{ id: 1 }, { id: 2 }] 
 ))
)

我们已经存根active以返回我们存根了double的模拟(a where

文档:rspec-mocks

PS:还有许多其他方式可以写这些存根,有些在客观上更好,有些在主观上更好。还有一些方法可以重构代码以使存根变得更容易。

PPS:欢迎使用红宝石!


0
投票

我会将检索数据(包括您提到的行)的代码分为一个方法,将对数据进行消耗/操作的代码分为另一个方法,然后模拟整个检索方法。这样,您就不必为所使用的确切查询感到困惑。

© www.soinside.com 2019 - 2024. All rights reserved.