Node.js 在使用摩卡进行测试之前清除收集

Node.js 在使用摩卡进行测试之前清除收集,node.js,unit-testing,mongoose,mocha.js,chai,Node.js,Unit Testing,Mongoose,Mocha.js,Chai,我正在使用Mocha、Chai和Mongoose为Node.js应用程序编写单元测试。如果集合为空(如所需),测试本身就可以工作,但在测试之前清除集合时遇到问题 let mongoose = require("mongoose"); let Subject = require('../Subject/subject'); //Require the dev-dependencies let chai = require('chai'); let chaiHttp = require('chai

我正在使用Mocha、Chai和Mongoose为Node.js应用程序编写单元测试。如果集合为空(如所需),测试本身就可以工作,但在测试之前清除集合时遇到问题

let mongoose = require("mongoose");
let Subject = require('../Subject/subject');

//Require the dev-dependencies
let chai = require('chai');
let chaiHttp = require('chai-http');
// let server = require('../server');
let server = "http://localhost:3000"
let should = chai.should();

chai.use(chaiHttp);

describe('subjects', () => {
  before((done) => { //Before each test, empty the database
    Subject.remove({})
    done();         
  });

  describe('/GET subject', () => {
    // working test
  });

  describe('/POST subject', () => {
    // working test
  });

  describe('/GET subject', () => {
    // working test
  });
});
我也尝试过不同的方法

Subject.deleteMany({}, (err) => console.log(err));

在前一个街区内没有用。我也尝试过在before块之外移除,以防万一。如果我
console.log(Subject.remove({}))
我得到了Subject对象,这样它就能够访问它,只是实际上没有对它做任何永久性的操作


我已经做了几个小时了,现在还没有弄清楚,所以非常感谢所有的帮助。

尝试像这样等待删除呼叫的回调

before((done) => { //Before each test, empty the database
 Subject.remove({}, done);
});

由于Mocha和Mognose都支持异步块,因此可以无缝地使用它们,而不是直接调用
done
。在这种情况下,应返还承诺:

  before(() => Subject.remove({}));

尝试此操作会导致超时错误。我最初遇到这个问题是因为一个错误放置的done()调用。可以理解为什么错误放置的
done
会导致问题,但是
remove
在没有回调的情况下返回表,它应该可以工作。摩卡咖啡就是这样做的。在这种情况下,不应执行
Subject.remove({}).exec()
可能可以工作,但我希望它在没有
exec
的情况下也能工作。
  before(() => Subject.remove({}));