Очистка тестовой базы данных перед запуском тестов

Каков наилучший способ очистки базы данных перед запуском набора тестов (есть ли библиотека npm или рекомендуемый метод для этого).

Я знаю о функции before().

Я использую node/express, mocha и sequelize.

Ответы

Ответ 1

Функция before примерно такая же, как и для очистки базы данных. Если вам нужно только очистить базу данных, как только вы запустите все свои тесты, вы можете иметь глобальную функцию before в отдельном файле

globalBefore.js

before(function(done) {
   // remove database data here
   done()
}) 

Стабилизаторы тест-1.js

require('./globalBefore)
// actual test 1 here

Стабилизаторы тест-2.js

require('./globalBefore)
// actual test 2 here

Обратите внимание, что globalBefore будет работать только один раз, даже если он требуется дважды

Принципы тестирования

Попробуйте ограничить использование внешних зависимостей, таких как базы данных в ваших тестах. Чем меньше внешних зависимостей, тем легче тестирование. Вы хотите иметь возможность выполнять все параллельные тесты параллельно, а общий ресурс, такой как база данных, затрудняет выполнение.

Взгляните на этот раздел Google Tech о написании тестового javascript http://www.youtube.com/watch?v=JjqKQ8ezwKQ

Также обратите внимание на модуль rewire. Он отлично работает для выполнения функций.

Ответ 2

Я обычно делаю это так (скажем, для модели User):

describe('User', function() {
  before(function(done) {
    User.sync({ force : true }) // drops table and re-creates it
      .success(function() {
        done(null);
      })
      .error(function(error) {
        done(error);
      });
  });

  describe('#create', function() {
    ...
  });
});

Там также sequelize.sync({force: true}), который отбрасывает и воссоздает все таблицы (.sync()описывается здесь).

Ответ 3

Я сделал эту библиотеку для очистки и импорта светильников для вашего теста.

Таким образом, вы можете импортировать приборы, протестировать и затем очистить свою базу данных.

Посмотрите на следующее:

before(function (done) {
   prepare.start(['people'], function () {
      done();
   });
});

after(function () {
   prepare.end();
});

https://github.com/diogolmenezes/test_prepare