Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
Node.js 模拟访问Mongodb失败_Node.js_Mongodb - Fatal编程技术网

Node.js 模拟访问Mongodb失败

Node.js 模拟访问Mongodb失败,node.js,mongodb,Node.js,Mongodb,我创建了一个Express.js库,它使用官方的Node.js驱动程序进行Mongodb操作 我目前正在编写单元测试,我想模拟访问数据库的失败,以确保: 库确认故障情况(处理错误) 进行正确的错误回调并触发正确的事件 我希望测试能够跨平台运行,最好不用关闭或启动带有特殊参数的数据库 查看for命令,该命令似乎几乎完全符合我的要求,但以秒为单位的等待时间相当长,而且它被标记为仅供内部使用,您需要使用一个特殊参数启动数据库才能工作。该命令看起来像是另一个好命令,但再次说明,它仅列出供内部使用,并

我创建了一个Express.js库,它使用官方的Node.js驱动程序进行Mongodb操作

我目前正在编写单元测试,我想模拟访问数据库的失败,以确保:

  • 库确认故障情况(处理错误)
  • 进行正确的错误回调并触发正确的事件
我希望测试能够跨平台运行,最好不用关闭或启动带有特殊参数的数据库

查看for命令,该命令似乎几乎完全符合我的要求,但以秒为单位的等待时间相当长,而且它被标记为仅供内部使用,您需要使用一个特殊参数启动数据库才能工作。该命令看起来像是另一个好命令,但再次说明,它仅列出供内部使用,并且至少可以说描述是模糊的


我想知道是否有任何推荐的方法(最好不要太草率)可以做到这一点。

在这里,执行此脚本的节点进程需要超级用户权限才能向MongoDB进程发送信号,而不会产生信号,但这是我迄今为止发现的最好的模拟无响应的方法:

var MongoDB = require('mongodb');

MongoDB.MongoClient.connect("mongodb://localhost:27017/SomeDB", {'server': {'socketOptions': {'connectTimeoutMS': 50, 'socketTimeoutMS': 50}}}, function(Err, DB) {
    if(Err)
    {
        console.log(Err);
    }
    else
    {
        DB.command({'serverStatus': 1}, function(Err, Result) {
            if(Err)
            {
                console.log(Err)
            }
            else
            {
                process.kill(Result.pid, 'SIGSTOP');
                //Put testing logic to test unresponsiveness
                process.kill(Result.pid, 'SIGCONT');
                DB.close();
            }
        });
    }
});
编辑:

如果您的测试逻辑在Linux上崩溃,您可以通过执行以下命令在shell上手动恢复MongoDB进程:

kill -CONT PID
其中PID是MongoDB进程的进程id