testingMongoose Node.JS应用程序

我正在尝试为我的Node应用程序的部分编写unit testing。 我正在使用Mongoose作为我的ORM。

我已经search了一堆如何使用Mongoose和Node进行testing,但没有任何东西。 解决scheme/框架似乎都是完整的,或者没有提到嘲笑的东西。

有没有办法我可以嘲笑我的Mongoose数据库,所以我可以在我的testing中返回静态数据? 我宁愿不必设置testing数据库,并填写每个unit testing的数据。

有人遇到过这种情况么?

我通过构build我的代码来解决这个问题。 我将所有与mongoose相关的东西放在单独的类中,例如“保存”,“查找”,“删除”等API,没有其他类直接访问数据库。 然后,我只是嘲笑那些依赖数据的testing。

我做了类似于返回的实际对象。 对于我在mongoose中的每一个模型,我都有一个相应的类来包装它,并为字段提供访问方法。 那些也很容易被嘲笑。

我也去找答案,最后到了这里。 这就是我所做的:

我开始使用嘲弄来模拟我的模型所在的模块。然后创build自己的模拟模块,每个模型都作为一个属性挂起来。 这些属性包装了真正的模型(以便testing中的代码存在子属性)。 然后我重写我想要操作的方法来保存testing。 这有嘲笑能够消除嘲笑的优势。

但…

我并不十分关心如何取消模拟来为每个模型编写包装属性。 所以现在我只需要我的模块,并重写我想要操作的函数。 如果成为问题,我可能会在单独的进程中运行testing。

在我的testing安排部分:

// mock out database saves var db = require("../../schema"); db.Model1.prototype.save = function(callback) { console.log("in the mock"); callback(); }; db.Model2.prototype.save = function(callback) { console.log("in the mock"); callback("mock staged an error for testing purposes"); }; 

另外值得一提的是:
mockgoose – 嘲笑Mongoose的内存数据库,用于testing目的。
monckoose – 类似的,但采取了不同的方法(实现一个假的驱动程序)。 Monckoose似乎在2015年3月份时尚未公布。