在使用 Mocha 进行测试之前清除集合

Clearing collection before testing with Mocha

我正在使用 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));

Subject.find({}, (subject)=>{
   subject.remove({}).exec()
})

在 before 块内无济于事。我也尝试过在 before 块之外删除,以防万一。如果我 console.log(Subject.remove({})) 我得到了 Subject 对象,那么它就可以访问它,只是实际上没有对它做任何永久性的事情。

我已经做了几个小时了,还没有进一步弄清楚,所以感谢大家的帮助。

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

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

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

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