Hi as of title of question I was wondering how one can check if loopback boot scripts have finished before launching tests. In a example project:
https://github.com/strongloop/loopback-example-relations
there is a file in the test folder that seems to do the job but unfortunately it does not solve it.
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();
});
}
};
This script is loaded in the rest test api as follows:
before(function(done) {
require('./start-server');
done();
});
but the function is never invoked. Is this the correct way it was meant to use that script?
I ended with the following implementation:
before(function (done) {
if (app.booting) {
console.log('Waiting for app boot...');
app.on('booted', done);
} else {
done();
}
});
which works, but I was puzzled by that start-server script.
EDIT
following the @stalin advice I modified the before
function as follows:
before(function(done) {
require('./start-server')(done);
});
and the execution goes in the else
branch but done
is never called.
You are never passing the done function to the start-server
script. Try to do this:
before(function(done) {
var server = require('./start-server');
server(done);
});
It might not work when your boot scripts are using asynchronous functions (for example to automigrate models schema). Application will set booting = false
and not wait for callbacks to finish until you invoke a callback explicitly:
// 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();
});
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With