模拟未能访问Mongodb

我创build了一个Express.js库,它使用官方的Node.js驱动来执行它的Mongodb操作。

我目前正在编写unit testing的过程,我想模拟失败访问数据库,以确保:

  • 图书馆承认失败案件(处理错误)
  • 进行正确的错误callback并触发适当的事件。

我希望testing运行跨平台,最好不必closures或启动具有特殊参数的数据库。

看看命令的参考 , 睡眠命令似乎几乎完全是我想要的,但等待时间在几秒钟内相当长,再加上它被标记为仅供内部使用,您需要使用一个特殊的参数触发数据库它的工作。 forceerror命令看起来像是另一个好的命令,但是它又被列为仅供内部使用,描述含糊不清。

我想知道是否有任何build议(最好不要过度hackish)这样做。

在这里,它需要超级用户权限执行这个脚本的节点进程发送信号到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(); } }); } }); 

编辑:

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

 kill -CONT PID 

其中PID是MongoDB进程的进程ID。