Возможные коллизии асинхронных юнит-тестов с тестовой базой данных в Мокко - PullRequest
0 голосов
/ 08 марта 2020

Я новичок в экосистеме javascript, и я пытаюсь обдумать достойный способ провести базовое c тестирование юнита по API REST с использованием сохраненного набора приборов. , т. е. .json файлов.

Моя точка входа устанавливает среду тестирования, подключаясь к тестовой базе данных, и выдает состояние ready.

if (!process.env.TESTING) {
  /* Connect to MongoDB */
  connect(process.env.DEV_DB_HOST, process.env.DEV_DB, () => app.emit(ready));
  app.on(ready, () => {
    app.listen(port, () => console.log(`Listening on port ${port}!`));
  });
} else {
  connect(process.env.TEST_DB_HOST, process.env.TEST_DB, () => app.emit(ready));
}

export default app;

Как только соединение установлено, коллекция, воссозданная в тестовой базе данных с использованием осветителей, и тесты будут выполнены.

import Paper from '../models/paper.js';

describe('Home Page', () => {
  before(async() => {
    await new Promise((resolve, reject) => {
      app.on(ready, () => resolve());
    }).then(async() => {
      try {
        await Paper.collection.drop();
      } catch(error) {
        /* Mongo throws an exception if the collection in question does not exist */
      }
      await Paper.create(fixtures);
    });
  });

  after(async() => {
    await Paper.collection.drop();
  });

  it('Returns a list of items ordered by date in descending order', async() => {
    const response = await chai.request(app).get('/');
    expect(response.body).to.have.lengthOf(2);
    expect(response.body).to.be.sortedBy("date", { descending: true });
  });
});

Если я заменю before и after хуков на beforeEach и afterEach, так как тесты async, возможно, что ловушка выполняется для теста и выдает коллекцию перед завершением выполнения другого теста, использующего коллекцию? Если да, каков хороший способ go заполнить тестовую базу данных осветителями для каждого тестового случая?

...