在运行测试套件之前清理数据库的最佳方法是什么(有没有NPM库或者推荐的方法来做这件事)。我知道before()函数。我使用了node/express、mocha和sequelize。
ru9i0ody1#
如果您只需要清理数据库一次,即在运行所有测试之前,您可以在单独的文件中拥有一个全局before函数全球Before.js
before
before(function(done) { // remove database data here done() })
require('./globalBefore') // actual test 1 here
require('./globalBefore') // actual test 2 here
请注意,globalBefore将只运行一次,即使它已被要求两次
尝试限制测试中外部依赖项(如数据库)的使用。外部依赖项越少,测试就越容易。您希望能够并行运行所有单元测试,而共享资源(如数据库)会使这一点变得困难。看看这个Google技术讨论如何编写可测试的javascript http://www.youtube.com/watch?v=JjqKQ8ezwKQ还可以看一下rewire模块,它对于stubbing out函数非常有效。
oewdyzsn2#
我通常是这样做的(比如对于User模型):
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()在here中描述)。
sequelize.sync({force: true})
.sync()
djmepvbi3#
将其添加到测试文件中。这将撤消所有迁移,并在添加系统初始数据时创建新表,以便您对系统初始数据进行测试。
const SCRIPT_TO_TRUNCATE_AND_SEED_DATABASE = 'cd apps/backend && npx sequelize-cli db:migrate:undo:all && npx sequelize-cli db:migrate && cd ../.. && npx sequelize-cli db:seed:all' test( 'TRUNCATE_AND_SEED_DATABASE', done => { exec(SCRIPT_TO_TRUNCATE_AND_SEED_DATABASE, (err, out) => { try { console.log(out); expect(err).toBe(null); done(); } catch (e) { done(e); } }); }, TIME_CONSTANT.ONE_MINUTE, );
wmvff8tz4#
我创建这个库是为了清理和导入用于测试的fixture。这样,您就可以导入fixture、测试,然后清理数据库。请看以下内容:
before(function (done) { prepare.start(['people'], function () { done(); }); }); after(function () { prepare.end(); });
https://github.com/diogolmenezes/test_prepare
4条答案
按热度按时间ru9i0ody1#
如果您只需要清理数据库一次,即在运行所有测试之前,您可以在单独的文件中拥有一个全局
before
函数全球Before.js
单次测试-1.js
单次测试-2.js
请注意,globalBefore将只运行一次,即使它已被要求两次
测试原则
尝试限制测试中外部依赖项(如数据库)的使用。外部依赖项越少,测试就越容易。您希望能够并行运行所有单元测试,而共享资源(如数据库)会使这一点变得困难。
看看这个Google技术讨论如何编写可测试的javascript http://www.youtube.com/watch?v=JjqKQ8ezwKQ
还可以看一下rewire模块,它对于stubbing out函数非常有效。
oewdyzsn2#
我通常是这样做的(比如对于
User
模型):还有
sequelize.sync({force: true})
,它将删除并重新创建 * 所有 * 表(.sync()
在here中描述)。djmepvbi3#
将其添加到测试文件中。这将撤消所有迁移,并在添加系统初始数据时创建新表,以便您对系统初始数据进行测试。
wmvff8tz4#
我创建这个库是为了清理和导入用于测试的fixture。
这样,您就可以导入fixture、测试,然后清理数据库。
请看以下内容:
https://github.com/diogolmenezes/test_prepare