嗨作为问题标题我想知道如何能够检查是否回环启动脚本已推出测试之前完成。在一个示例项目:
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
永远不会被调用。
你永远传递完成功能的start-server
脚本。试着这样做:
before(function(done) {
var server = require('./start-server');
server(done);
});
当你的启动脚本使用异步功能(例如,以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();
});
};
我只是想指出的方式环回队做到了
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();
然后你会发现,他们在每一个集成测试中调用它几乎
describe('access control - integration', function() {
lt.beforeEach.withApp(app);