-
Notifications
You must be signed in to change notification settings - Fork 62
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Testing a hapi service composed using glue #14
Comments
(not a glue or hapi contributor, just my 2 cents...) If your endpoint functionality is all contained within the modules in var Glue = require('glue');
var manifest = require('./config/manifest.json');
var options = {
relativeTo: process.cwd() + '/lib/modules'
};
Glue.compose(manifest, options, function (err, server) {
server.start(function () {
server.log('info', 'Server running at: ' + server.info.uri);
});
}; while your tests would be like this:
var Glue = require('glue');
var manifest = require('../config/manifest.json');
var options = {
relativeTo: process.cwd() + '/lib/modules'
};
Glue.compose(manifest, options, function (err, server) {
server.start(function () {
// tests here using server.inject as you did before
});
}; That's assuming that there is no additional work happening in your |
Yeah, my scenario is exactly as you described, so I will follow your advice and compose the server in the tests too. I think my index.js file has got a bit cluttered with my current solution, and it remains clearer with yours. Thank you very much! |
I had the same issue recently, and composing the server inside a Promise worked well. It also gets along nicely with mocha by requiring it on the |
Glue.compose(manifest, options, (err, server) => {
if (!module.parent) {
server.start(() => {
console.log('Server started on port:', server.info.uri);
});
} else {
module.exports = server;
}
}); think this is the cheapest way |
Sorry for reviving this thread. Glue's compose callback is not executed asynchrouously. This is similar to Joi.validate. This can be quite confusing at first (or was it just me?) given most error-first callbacks in nodejs are executed async. Given this, I think oviava's comment above this is the simpliest way to go. |
I created a tool to specifically help with this: https://github.com/devinivy/labbable#with-glue |
The following article shows how to tests the plugins directly without having to depend on the server wrapped in the glue composer: I think this is by far the cleanest solution to testing your plugins, routes, and handler responses in a decoupled manner. |
This thread has been automatically locked due to inactivity. Please open a new issue for related bugs or questions following the new issue template instructions. |
When I wasn't using glue to compose the server, the way I tested my code was pretty straight-forward. I exported the Hapi server instance from the index.js file and then, in the test modules, I required it and used the server.inject method to test the endpoints of my API.
However, using glue my index turned into something like this, with the server instance being available asynchronously:
index.js:
So now, trying to figure out how may be the best way to export that server variable to make it accessible to the test modules, I've come up with this solution. I don't know if I'm doing the right thing, so I'm seeking advice:
index.js:
Then the index.js would be required from the tests this way:
test/whatever.js:
Any opinions would be very appreciated.
Thanks!
Matias
The text was updated successfully, but these errors were encountered: