Каков наилучший способ очистки базы данных перед запуском набора тестов (есть ли библиотека npm или рекомендуемый метод для этого).
Я знаю о функции before().
Я использую node/express, mocha и sequelize.
Каков наилучший способ очистки базы данных перед запуском набора тестов (есть ли библиотека npm или рекомендуемый метод для этого).
Я знаю о функции before().
Я использую node/express, mocha и sequelize.
Функция before
примерно такая же, как и для очистки базы данных. Если вам нужно только очистить базу данных, как только вы запустите все свои тесты, вы можете иметь глобальную функцию before
в отдельном файле
before(function(done) {
// remove database data here
done()
})
require('./globalBefore)
// actual test 1 here
require('./globalBefore)
// actual test 2 here
Обратите внимание, что globalBefore будет работать только один раз, даже если он требуется дважды
Попробуйте ограничить использование внешних зависимостей, таких как базы данных в ваших тестах. Чем меньше внешних зависимостей, тем легче тестирование. Вы хотите иметь возможность выполнять все параллельные тесты параллельно, а общий ресурс, такой как база данных, затрудняет выполнение.
Взгляните на этот раздел Google Tech о написании тестового javascript http://www.youtube.com/watch?v=JjqKQ8ezwKQ
Также обратите внимание на модуль rewire. Он отлично работает для выполнения функций.
Я обычно делаю это так (скажем, для модели 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()
описывается здесь).
Я сделал эту библиотеку для очистки и импорта светильников для вашего теста.
Таким образом, вы можете импортировать приборы, протестировать и затем очистить свою базу данных.
Посмотрите на следующее:
before(function (done) {
prepare.start(['people'], function () {
done();
});
});
after(function () {
prepare.end();
});