Очистка коллекции перед тестированием с Мокко - PullRequest
0 голосов
/ 19 мая 2018

Я пишу юнит-тесты для моего приложения Node.js, используя Mocha, Chai и Mongoose.Сами тесты работают, если коллекция пустая (по желанию), но у меня возникают проблемы с очисткой коллекции перед тестированием.

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, он сможет получить к нему доступ, но на самом деле я не буду делать с ним ничего постоянного.

Я занимался этим пару часов и не приблизился.чтобы понять это, поэтому вся помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Поскольку и Mocha, и Mognoose поддерживают обещания для асинхронных блоков, их можно беспрепятственно использовать вместо прямого вызова done.В этом случае обещание должно быть возвращено:

  before(() => Subject.remove({}));
0 голосов
/ 19 мая 2018

Попробуйте дождаться обратного вызова для удаления вызова, как это

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