27

在运行测试套件之前清理数据库的最佳方法是什么(是否有 npm 库或推荐的方法)。

我知道 before() 函数。

我正在使用 node/express、mocha 和 sequelize。

4

3 回答 3

28

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 只会运行一次,即使它已被要求两次

测试原理

尝试限制在测试中使用外部依赖项,例如数据库。外部依赖越少,测试就越容易。您希望能够并行运行所有单元测试,而数据库等共享资源使这变得困难。

看看这个关于编写可测试 javascript http://www.youtube.com/watch?v=JjqKQ8ezwKQ的 Google 技术讲座

还要看看重新布线模块。它非常适合存根函数。

于 2013-05-01T15:54:41.177 回答
19

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

于 2013-05-01T14:13:16.157 回答
-1

我制作了这个库来为您的测试清理和导入固定装置。

这样,您可以导入夹具、测试然后清理您的数据库。

看看以下内容:

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

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

https://github.com/diogolmenezes/test_prepare

于 2016-12-23T17:02:57.143 回答