代码之家  ›  专栏  ›  技术社区  ›  Noitidart

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

  •  0
  • Noitidart  · 技术社区  · 7 年前

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

    我现在唯一的解决办法就是改变 lifecyle.test.js before after 运行 beforeEvery afterEvery https://sailsjs.com/documentation/concepts/testing

    1 回复  |  直到 7 年前
        1
  •  1
  •   Pavlo Zhukov    7 年前

    这很简单。您只需要指定在数据源上的连接中添加测试连接(取决于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'
      },
    };
    

    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();
    
    });
    
        2
  •  1
  •   Anh Tran    6 年前

    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');
    });