Node.js 在运行测试之前清除测试数据库
在运行测试套件之前清理数据库的最佳方法是什么(是否有npm库或推荐的方法) 我知道before()函数 我正在使用node/express、mocha和sequelize。我通常是这样做的(比如对于Node.js 在运行测试之前清除测试数据库,node.js,express,mocha.js,sequelize.js,Node.js,Express,Mocha.js,Sequelize.js,在运行测试套件之前清理数据库的最佳方法是什么(是否有npm库或推荐的方法) 我知道before()函数 我正在使用node/express、mocha和sequelize。我通常是这样做的(比如对于用户型号): 还有一个sequelize.sync({force:true}),它将删除并重新创建所有表(.sync()。前面的函数与清理数据库的功能一样好。如果只需要清理数据库一次,即在运行所有测试之前,可以在单独的文件中使用全局before函数 globalBefore.js single-te
用户
型号):
还有一个
sequelize.sync({force:true})
,它将删除并重新创建所有表(.sync()
。前面的函数与清理数据库的功能一样好。如果只需要清理数据库一次,即在运行所有测试之前,可以在单独的文件中使用全局before
函数
globalBefore.js
single-test-1.js
single-test-2.js
请注意,globalBefore将只运行一次,即使它已被要求运行两次
测试原理
在测试中尽量限制使用外部依赖项,如数据库。外部依赖性越小,测试就越容易。您希望能够并行运行所有单元测试,而共享资源(如数据库)使这一点变得困难
看看这篇关于编写可测试javascript的Google技术讲座
还要看一下模块。它在剔除函数方面非常有效。我制作这个库是为了清理和导入测试用的夹具
通过这种方式,您可以导入装置、测试并清理数据库
请看以下内容:
before(function (done) {
prepare.start(['people'], function () {
done();
});
});
after(function () {
prepare.end();
});
您建议的库是为MongoDB提供的,但问题是sequelize。有什么现代化的方法吗?@coler-j sequelize现在使用承诺,所以之前(()=>User.sync({force:true}))
现在也应该可以使用了(如果这就是您所说的“现代化方法”:D)我只是想知道是否有任何本机方法可以在内置的事务中自动包装测试用例,因为这似乎是一个非常常见的要求。@coler-jbefore
(以及beforeach
)可以应用于每一组测试,因此您可以在每一组测试之前启动一个事务然后提交或回滚(每次提交后使用或后使用)。Mocha作为一个测试运行者根本不处理数据库,所以它不是一个内置的功能。好吧,我只是看到了一些问题(比如和),当测试完成时,事件循环会退出,并且由于我不了解CLS,所以不可能在每次测试后回滚事务
before(function(done) {
// remove database data here
done()
})
require('./globalBefore)
// actual test 1 here
require('./globalBefore)
// actual test 2 here
before(function (done) {
prepare.start(['people'], function () {
done();
});
});
after(function () {
prepare.end();
});