Comments (8)
I created a tool to specifically help with this: https://github.com/devinivy/labbable#with-glue
from glue.
(not a glue or hapi contributor, just my 2 cents...)
If your endpoint functionality is all contained within the modules in lib/modules
and your index.js
literally just sets up the Glue compose work, I would avoid exporting/importing your server and instead replicate it in your tests. So your index.js
would remain like so:
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:
test/whatever.js
:
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 index.js
that you need to test. If you're just doing the calls to Glue there, the endpoints are being accurately tested in this method. It does add the overhead of changing references to the manifest in multiple places if changed in index.js
so bear that in mind.
from glue.
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!
from glue.
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 before
hook.
from glue.
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
from glue.
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.
from glue.
The following article shows how to tests the plugins directly without having to depend on the server wrapped in the glue composer:
http://ideasintosoftware.com/unit-testing-hapi-plugins/
I think this is by far the cleanest solution to testing your plugins, routes, and handler responses in a decoupled manner.
from glue.
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.
from glue.
Related Issues (20)
- how do you pass in concurrent option to hapi? HOT 4
- Should we have a "ISSUE_TEMPLATE.md" for Glue? HOT 1
- How should I use routes in server config (failAction). HOT 3
- Add hook to transform plugin list before registration HOT 17
- Integration with webpack - dynamic import issue HOT 4
- Make hapi a peer dependency HOT 7
- Error: Cannot start server before plugins finished registration HOT 4
- Using glue with hapi-mongoose HOT 5
- server.events is undefined after glue compose HOT 5
- Server options load support? Migrating from hapi 16 -> 17 HOT 6
- Change module namespace HOT 1
- Change module namespace for v5 branch HOT 1
- Server cache options in hapi 18 cannot be passed HOT 3
- Action required: Greenkeeper could not be activated 🚨 HOT 1
- Update deps HOT 1
- Update joi HOT 1
- Add typescript type definitions HOT 2
- Only node 12
- No way of passing default route validator to glue HOT 1
- plugin.name is required
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from glue.