如何通过Mocha为某些Node.js测试设置MongoDB?

时间:2018-08-29 23:35:45

标签: node.js mongodb testing mocha tdd

我正在手动测试一些访问MongoDB的Node.js端点。 而且我正在使用运行程序在开发模式(https://www.npmjs.com/package/run-rs)中设置副本集

我的流程如下:

  1. $ run-rs -v 4.0.0 -s
  2. rs:PRIMARY>使用m​​y_db
  3. rs:PRIMARY> load(“ create-db.js”)

然后在一个单独的终端窗口中,npm开始运行我的Node.js应用程序并连接到my_db。 在create-db.js中,我设置了许多集合。像这样:

db.categorie.insert({"categories":["all","cat","dog","cow","mus"]});

var users = [{
    "_id" : ObjectId("5b7b99477943f109fba8b128"),
    "admin" : false,
    "log" : false,
    "city" : "",
    "state" : "",
    "country" : "",
    "active" : true,
    "forgot" : false,
    "email" : "some+user@gmail.com",
    "hash" : "88409d4e8754af084ccb8554934e979bcd7c6a7f2532915b225a47b97de9b80a70c2c025e5610d9cdc15afebdd4efe26f9df586ee3b57763d196c96fb5dff96a1e3cfa80acf0bd232acb5b8eb7a2e9cf06a48dfd9b8cfd16ebd6fc33a1d7c5a6f66fb1c1efa45c570acb16e08c1867c8a58de40d4471433aa025de46cc21d07f52b68e0494f24f41efc2234c97070a943fb149640ae9e434de0df0154e0893718d3177c9bde61169cac2ee3bf265ffa99ca8338602d5be8c3e18aa7df99ba3cb38ca00bc17e85d680f92c6e3f84bb0cd63c062931b5e90793e9774c1f7c58a4312562e24752c366d5459ff9214b57309ac8e16357fee109cc1d397d48d1f1a6438d19226ffb0c42a175a0043a8a6405f85290657b1ce75504585123b0af9c1de01e3edc2d0538ab2246900e3a811c12ece1b2495e2d532a4a01f5e5ebc1ebe25853147071cfc394f9161d643b518327c5be777d5dabb701485a919533d972a046c4b86af6c3edf427ea73ac8d7a5cf19cf236ec9849984f4c1029a12c7ee0bc655125b9558eba223e6768a36c4bbbefdcda6f218561446bbc86efb41c4ca5755e89d3a4a9f3e7f480dea158e15687d6b1838356cc9ce37b86827283bb4a596681a4f691c5ab812769b753e7ece29d4dd81c90e98e3b8cf0261d88ecfc37c8d32db7efea99a84d2689d577cd20130b4c7f93493bd7c88d2a388c1de4d0d4c41d1",
    "salt" : "9b3a7884e00077a125e7cbdc9dddc09236804cee65gb31467910755aeb2759d0",
    "__v" : 0
},
{
...
},
{
...
}];
db.users.insertMany(users);

...等等,还有许多其他收藏集。

数据库设置非常庞大,我想让事情井井有条。 事实是,我正在手动运行run-rs,而且还从mongo shell加载了脚本。我不知道如何从Mocha做到这一点-即使这不是最佳实践。

2 个答案:

答案 0 :(得分:0)

如果要在测试一组测试用例之前每次都执行此操作,则应使用before钩子,您可以在其中设置测试所需的数据库/所有集合等。然后进行测试,并在after钩中进行清理。

因此,假设您在run-rs之后,之前的钩子中运行手动脚本,然后进行测试。

这里是MongoDB hooks

的链接

答案 1 :(得分:0)

如果要运行命令,则可以始终使用exec()并将其作为测试之前的设置过程。如果要始终在挂钩中运行它,请将其作为函数运行。

exec('dir', (err, stdout, stderr) => {
  if (err) {
    console.error(`exec error: ${err}`);
    return;
  }

  console.log(`Number of files ${stdout}`);
});