Mocha 测试,在每个文件运行之前清理磁盘数据库

Mocha tests, clean disk database before every file runs

我正在使用 Sails 1.x。

是否可以在每个测试文件 运行 之前重置 Sails.js 数据库?我希望它在每个 运行 之前 sails.lift() 完成后处于状态。我按照这里的文档 - https://sailsjs.com/documentation/concepts/testing - 但没有得到这样的任何解决方案。

我现在唯一的解决方案是将 lifecyle.test.js beforeafter 更改为 运行 beforeEveryafterEvery - https://sailsjs.com/documentation/concepts/testing - 所以每次测试前都会提升。但是需要很长时间才能抬起。

这很容易做到。您只需要指定在您的数据源连接中添加测试连接(取决于 Sails.js 的版本),在测试期间将其设置为活动状态并提供迁移策略 'drop' 只是重建您的数据库启动时间

models: {
    connection: 'test',
    migrate: 'drop'
},

我的人脉 Sails.js 0.12.14

module.exports.connections = {
  prod: {
    adapter: 'sails-mongo',
    host: 'localhost',
    port: 27017,
    database: 'some-db'
  },

  test: {
    adapter: 'sails-memory'
  },
};

我的简化版lifecycle.test.js

let app;
// Before running any tests...
before(function(done) {
    // Lift Sails and start the server
    const Sails = require('sails').constructor;

    const sailsApp = new Sails();
    sailsApp.lift({
        models: {
            connection: 'test',
            migrate: 'drop'
        },
    }, function(err, sails) {
        app = sails;
        return done(err, sails);
    });
});

// After all tests have finished...
after(async function() {
    // here you can clear fixtures, etc.
    // (e.g. you might want to destroy the records you created above)

    try {
        await app.lower()
    } catch (err) {
        await app.lower()
    }
});

在 Sails 1 中更简单

const sails = require('sails');

before((done) => {
  sails.lift({
    datastores: {
      default: {
        adapter: 'sails-memory'
      },
    },
    hooks: { grunt: false },
    models: {
      migrate: 'drop'
    },
  }, (err) => {
    if (err) { return done(err); }

    return done();
  });
});

after(async () => {

  await sails.lower();

});

我在 bootstrap 测试文件中使用它来清理数据库。

const sails = require('sails');

before((done) => {
  sails.lift({
    log: {
      level: 'silent'
    },
    datastores: {
      default: {
        adapter: 'sails-disk',
        inMemoryOnly: true
      }
    },
    models: {
      migrate: 'drop',
      archiveModelIdentity: false
    }
  }, function (err, sails) {
    if (err) return done(err);
      done(err, sails);
  });
});

after(async () => {
  await sails.lower();
});

beforeEach((done) => {
  sails.once('hook:orm:reloaded', done);
  sails.emit('hook:orm:reload');
});