环回和摩卡:等待服务器完成启动脚本

问题描述 投票:6回答:3

嗨作为问题标题我想知道如何能够检查是否回环启动脚本已推出测试之前完成。在一个示例项目:

https://github.com/strongloop/loopback-example-relations

存在这样似乎做的工作,但遗憾的是它并没有解决它的测试文件夹file

start-server.js:

var app = require('../server/server');

module.exports = function(done) {
  if (app.loaded) {
    app.once('started', done);
    app.start();
  } else {
    app.once('loaded', function() {
      app.once('started', done);
      app.start();
    });
  }
};

这个脚本在rest test api加载如下:

before(function(done) {
    require('./start-server');
    done();
});

但功能则永远不会调用。这是正确的方式,它是为了使用该脚本?

我用下面的执行结束:

before(function (done) {
    if (app.booting) {
        console.log('Waiting for app boot...');
        app.on('booted', done);
    } else {
        done();
    }
});

它的工作原理,但我通过启动服务器脚本不解。

编辑继@stalin建议我修改了before功能如下:

before(function(done) {
    require('./start-server')(done);
});

和执行云在else分支,但done永远不会被调用。

javascript node.js loopbackjs strongloop
3个回答
4
投票

你永远传递完成功能的start-server脚本。试着这样做:

before(function(done) {
    var server = require('./start-server');
    server(done);
});

1
投票

当你的启动脚本使用异步功能(例如,以automigrate模型架构)可能无法正常工作。应用程序将设置booting = false,而不是等待回调结束,直到你调用一个回调明确:

// boot script with extra callback param:
module.exports = function (app, cb) {
  var db = app.dataSources.db;

  // update all database models
  db.autoupdate(function (err) {
    if (err) throw err;
    cb();
  });
};

1
投票

我只是想指出的方式环回队做到了

https://github.com/strongloop/loopback/blob/44951a1032d2115a20a098fbeea767e0a5cd72c1/test/helpers/loopback-testing-helper.js#L39

beforeEach(function(done) {
    this.app = app;
    var _request = this.request = request(app);
    this.post = _request.post;
    this.get = _request.get;
    this.put = _request.put;
    this.del = _request.del;
    this.patch = _request.patch;

    if (app.booting) {
      return app.once('booted', done);
    }
done();

然后你会发现,他们在每一个集成测试中调用它几乎

https://github.com/strongloop/loopback/blob/b77907ffa59c7031fcb3bb6dbff96894bc597ba4/test/user.integration.js#L16

describe('access control - integration', function() {
  lt.beforeEach.withApp(app);
© www.soinside.com 2019 - 2024. All rights reserved.