Cleaning out test database before running tests

与世无争的帅哥 提交于 2019-12-18 12:54:27

问题


What is the best way to clean out a database before running a test suite (is there a npm library or recommended method of doing this).

I know about the before() function.

I'm using node/express, mocha and sequelize.


回答1:


The before function is about as good as you will do for cleaning out your database. If you only need to clean out the database once i.e. before you run all your tests, you can have a global before function in a separate file

globalBefore.js

before(function(done) {
   // remove database data here
   done()
}) 

single-test-1.js

require('./globalBefore)
// actual test 1 here

single-test-2.js

require('./globalBefore)
// actual test 2 here

Note that the globalBefore will only run once even though it has been required twice

Testing Principles

Try to limit the use of external dependecies such as databases in your tests. The less external dependencies the easier the testing. You want to be able to run all your unit tests in parallel and a shared resource such as a database makes this difficult.

Take a look at this Google Tech talk about writing testable javascript http://www.youtube.com/watch?v=JjqKQ8ezwKQ

Also take look at the rewire module. It works quite well for stubbing out functions.




回答2:


I usually do it like this (say for a User model):

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() {
    ...
  });
});

There's also sequelize.sync({force: true}) which will drop and re-create all tables (.sync() is described here).




回答3:


I made this lib to clean and import fixtures for your test.

This way, you can import fixtures, test and then clean your database.

Take a look at the following:

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

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

https://github.com/diogolmenezes/test_prepare



来源:https://stackoverflow.com/questions/16319463/cleaning-out-test-database-before-running-tests

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!