Как эффективно заполнить базу данных MongoDB для тестирования e2e - PullRequest
0 голосов
/ 11 ноября 2019

Я настроил свои среды, как описано здесь: https://medium.com/developer-circles-lusaka/how-to-write-an-express-js-server-using-test-driven-development-921dc55aec07

Это означает, что я использую пакет конфигурации для выбора среды.

Я хотел бы сделать следующее:-) заполнять базу данных перед каждым тестом. Я ожидаю, что это можно сделать с помощью хука beforeEach (), который предоставляет Mocha (я использую Mocha в качестве тестового прогона).

Мой вопрос заключается в том, как эффективно загрузить кучу данных в базу данных. все сразу (я использую Mongoose на случай, если что-то изменится. Не знаю, смогу ли я пропустить это при вставке)? Предпочтительно это делается в отдельном файле из теста.

1 Ответ

2 голосов
/ 12 ноября 2019

Вот что я делаю:

Полностью удалите базу данных перед каждым. Вы можете получить доступ к экземпляру mongodb при подключении к mongoose, например: db.db.dropDatabase()

Создайте предварительно сконфигурированные объекты данных для моего домена и сохраните их в импортируемом мной модуле - простые объекты JavaScript. Поэтому у меня есть такие данные, как data.users.vader и data.users.luke, data.products.deathStar и т. Д.

. В своих тестах я использую chaihttp для поиска маршрутов с такими данными:

let user = data.users.vader;
chai.request(server)
                    .post('/users')
                    .send(user)
                    .end((err, result) => {
                        if (err) {
                            return callback(err);
                        }

result.should.have.status(200);
                        result.body.status.should.eq(enums.status.success);
                        result.body.data._id.should.be.a('string');
                        result.body.data.name.should.eq(user.name);
                        result.body.data.email.should.eq(user.email);

Каждый модульный тест сбрасывает базу данных и создает необходимые данные. Я начинаю так, чтобы каждый тест был независимым.

Вы также можете массово загружать данные, используя batchWriteItem mongodb позже.

Я также создаю функции, которые можно вызывать в модульных тестах, которые будутданные массовой загрузки с использованием batchWriteItem - это в основном для запросов на тестирование и т. д.

...