【问题标题】:How to setup MongoDB from Mocha for some Node.js tests?如何从 Mocha 为一些 Node.js 测试设置 MongoDB?
【发布时间】:2018-08-29 23:35:44
【问题描述】:

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

我的流程如下:

  1. $ run-rs -v 4.0.0 -s
  2. rs:PRIMARY> 使用 my_db
  3. rs:PRIMARY> 加载(“create-db.js”)

然后在一个单独的终端窗口中,npm start 运行我的 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 做到这一点 - 或者即使它是否是最佳实践。

【问题讨论】:

    标签: node.js mongodb testing mocha.js tdd


    【解决方案1】:

    如果您每次在测试一组测试用例之前都这样做,那么您应该使用before 挂钩,您可以在其中设置测试所需的数据库/所有集合等。然后您进行测试并在 after 挂钩中进行清理。

    所以你会运行你的手动脚本,我假设在 run-rs 之前的所有钩子之后......然后做你的测试。

    这是MongoDB hooks的链接

    【讨论】:

    【解决方案2】:

    如果您想运行这些命令,您可以随时使用 exec() 并将其作为测试前的设置过程。如果您想始终在钩子中运行它,请将其设为函数并运行。

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

    【讨论】:

    • 这可能会奏效......而且我认为一旦数据库启动,我可以运行 db.runCommand("load('create-db.js')") 来执行我的脚本跨度>
    • 让我知道它是否有效,如果有效,请接受答案
    • 还有一步:一旦 run-rs 运行,在调用 db.runCommand 之前,如何从 Mocha 运行“使用 db_name”(就像我在 mongo shell 中所做的那样)?
    • 如果我必须运行一堆设置命令,我会创建一个批处理文件或类似文件并运行批处理文件本身。
    • 这正是我正在努力解决的问题。我正在尝试从 mongo 驱动程序调用加载函数,但我无法...我什至提出了另一个问题这个:stackoverflow.com/questions/52125137/…
    猜你喜欢
    • 2013-07-07
    • 2017-08-03
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2018-02-27
    相关资源
    最近更新 更多