关于问题标题,我想知道如何在启动测试之前检查环回启动脚本是否已完成。 在示例项目中:
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
。
答案 0 :(得分:4)
您永远不会将done函数传递给start-server
脚本。尝试这样做:
before(function(done) {
var server = require('./start-server');
server(done);
});
答案 1 :(得分:1)
当引导脚本使用异步函数时(例如,自动迁移模型架构),它可能不起作用。应用程序将设置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();
});
};
答案 2 :(得分:1)
我只想指出Loopback小组的做法
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);