Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 测试Mongoose Node.JS应用程序_Unit Testing_Testing_Node.js_Mongoose - Fatal编程技术网

Unit testing 测试Mongoose Node.JS应用程序

Unit testing 测试Mongoose Node.JS应用程序,unit-testing,testing,node.js,mongoose,Unit Testing,Testing,Node.js,Mongoose,我正在尝试为我的节点应用程序的某些部分编写单元测试。我用猫鼬做我的ORM 我已经搜索了很多关于如何使用Mongoose和Node进行测试的内容,但没有找到任何内容。这些解决方案/框架似乎都是满栈的,或者根本没有提到模仿的东西 有没有办法模拟Mongoose DB,以便在测试中返回静态数据?我不希望设置一个测试数据库,并为每个单元测试填充数据 还有其他人遇到过这个问题吗?我通过稍微结构化代码来解决这个问题。我把所有与猫鼬相关的东西都放在单独的类中,这些类有“save”、“find”、“delete

我正在尝试为我的节点应用程序的某些部分编写单元测试。我用猫鼬做我的ORM

我已经搜索了很多关于如何使用Mongoose和Node进行测试的内容,但没有找到任何内容。这些解决方案/框架似乎都是满栈的,或者根本没有提到模仿的东西

有没有办法模拟Mongoose DB,以便在测试中返回静态数据?我不希望设置一个测试数据库,并为每个单元测试填充数据


还有其他人遇到过这个问题吗?

我通过稍微结构化代码来解决这个问题。我把所有与猫鼬相关的东西都放在单独的类中,这些类有“save”、“find”、“delete”等API,没有其他类可以直接访问数据库。然后我简单地模拟那些依赖数据的测试


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

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

我开始用它来模拟我的模型所在的模块。然后创建我自己的模拟模块,每个模型作为属性挂起。这些属性包装了真实的模型(以便测试中的代码存在子属性)。然后我重写了我想要为测试操作的方法,比如save。这样做的好处是嘲弄可以撤销嘲弄

但是

我真的不太关心撤销模拟以编写每个模型的包装器属性。所以现在我只需要我的模块并重写我想要操作的函数。如果出现问题,我可能会在单独的进程中运行测试

在我的测试安排部分:

// 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");
};

同样值得一提的是:
-内存中模拟猫鼬的数据库,用于测试。

-类似,但采用不同的方法(实现假驱动程序)。Monckoose似乎在2015年3月尚未发布。

你是用NodeJS做的吗?
schema.js
中有什么内容?@Michelle最有可能的是Monckoose模式定义你的第二个链接已经死了,它似乎已经未发布。