NodeJS 运行测试前清理测试数据库

ego6inou  于 2022-12-22  发布在  Node.js
关注(0)|答案(4)|浏览(174)

在运行测试套件之前清理数据库的最佳方法是什么(有没有NPM库或者推荐的方法来做这件事)。
我知道before()函数。
我使用了node/express、mocha和sequelize。

ru9i0ody

ru9i0ody1#

如果您只需要清理数据库一次,即在运行所有测试之前,您可以在单独的文件中拥有一个全局before函数
全球Before.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技术讨论如何编写可测试的javascript http://www.youtube.com/watch?v=JjqKQ8ezwKQ
还可以看一下rewire模块,它对于stubbing out函数非常有效。

oewdyzsn

oewdyzsn2#

我通常是这样做的(比如对于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中描述)。

djmepvbi

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,
  );
wmvff8tz

wmvff8tz4#

我创建这个库是为了清理和导入用于测试的fixture。
这样,您就可以导入fixture、测试,然后清理数据库。
请看以下内容:

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

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

https://github.com/diogolmenezes/test_prepare

相关问题