Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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 如何修复柴摩卡的mongo_Node.js_Mongodb_Mocha.js_Chai - Fatal编程技术网

Node.js 如何修复柴摩卡的mongo

Node.js 如何修复柴摩卡的mongo,node.js,mongodb,mocha.js,chai,Node.js,Mongodb,Mocha.js,Chai,所以我想在测试开始之前恢复mongo数据库。 我这样做: const app = require("../app"); const chai = require("chai"); const mongoose = require("mongoose"); const User = require('../models/users'); const Region = require('../models/regions'); const testUsers = require('../testda

所以我想在测试开始之前恢复mongo数据库。 我这样做:

const app = require("../app");
const chai = require("chai");
const mongoose = require("mongoose");
const User = require('../models/users');
const Region = require('../models/regions');
const testUsers = require('../testdata/users.json');
const testRegions = require('../testdata/regions.json');

describe('Restoring database', function () {
    before(function(done) {
        var promises = [
            User.deleteMany().exec()
            ,Region.deleteMany().exec()
        ];
        console.log('Cleaned database');
        done();
    });

    before(function(done) {
        testUsers.users.forEach(element => {
            var ObjectId = mongoose.Types.ObjectId;
            element._id = new ObjectId(element._id);
            var newUser = new User(element);
            newUser.save(function (err, result) {
                if (err) {
                    console.log("err:",err);
                }
            });
        });
        console.log('Users added');
        done();
    });

    before(function(done) {
        testRegions.regions.forEach(element => {
            var newRegion = new Region(element);
            newRegion.save(function (err, result) {
                if (err) {
                    console.log("err:",err);
                }
            });
        });
        console.log('Regions added');
        done();
    });
testdata/users.json
testdata/regions.json
是包含密钥/对值的简单json文件

这个好看吗? 当我跑的时候

npm test
它没有给出任何错误。在控制台中,我看到:

Restoring database
Cleaned database
Users added
Regions added           
但当我在数据库中查找时,我得到了不同的结果。 有时候一切看起来都很好。所有行都在集合中。 有时其中一个集合中缺少几行。 有时其中一个集合是空的

这是一种非常奇怪的行为

我还尝试将变量“promises”添加到“newUser”和“newRegion”中,而不是直接执行它们。 但我仍然得到这些奇怪的结果


交易是什么?

问题是由于在异步声明/承诺完成之前调用了
done()

使用或使用承诺,仅在异步语句/承诺完成时调用
done()

例如:

done()
调用,因为我们使用
await
语句,这些语句将在每个语句完成后再继续:

before(async function() {
    let userResult = await User.deleteMany();
    let regionResult = wait Region.deleteMany();

    console.log('Cleaned database');
});
或者使用带有承诺的
done()

   before(function(done) {
        User.deleteMany()
           .then(result => {
              console.log('Cleaned database');

              done();
           });
    });
您之前的示例中的语法根本不是添加承诺,而是将这些函数添加到数组中:

    var promises = [
        User.deleteMany().exec()
        ,Region.deleteMany().exec()
    ];
请看以下与帮助相关的内容