You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.5 KiB
64 lines
1.5 KiB
3 years ago
|
'use strict'
|
||
|
|
||
|
const http = require('http')
|
||
|
const test = require('tap').test
|
||
|
const fastify = require('../')
|
||
|
|
||
|
function getUrl (app) {
|
||
|
const { address, port } = app.server.address()
|
||
|
if (address === '::1') {
|
||
|
return `http://[${address}]:${port}`
|
||
|
} else {
|
||
|
return `http://${address}:${port}`
|
||
|
}
|
||
|
}
|
||
|
|
||
|
test('handlers receive correct `this` context', (t) => {
|
||
|
t.plan(4)
|
||
|
|
||
|
// simulate plugin that uses fastify-plugin
|
||
|
const plugin = function (instance, opts, done) {
|
||
|
instance.decorate('foo', 'foo')
|
||
|
done()
|
||
|
}
|
||
|
plugin[Symbol.for('skip-override')] = true
|
||
|
|
||
|
const instance = fastify()
|
||
|
instance.register(plugin)
|
||
|
|
||
|
instance.get('/', function (req, reply) {
|
||
|
t.ok(this.foo)
|
||
|
t.equal(this.foo, 'foo')
|
||
|
reply.send()
|
||
|
})
|
||
|
|
||
|
instance.listen(0, (err) => {
|
||
|
instance.server.unref()
|
||
|
if (err) t.threw(err)
|
||
|
t.ok(instance.foo)
|
||
|
t.equal(instance.foo, 'foo')
|
||
|
|
||
|
http.get(getUrl(instance), () => {}).on('error', t.threw)
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('handlers have access to the internal context', (t) => {
|
||
|
t.plan(5)
|
||
|
|
||
|
const instance = fastify()
|
||
|
instance.get('/', { config: { foo: 'bar' } }, function (req, reply) {
|
||
|
t.ok(reply.context)
|
||
|
t.ok(reply.context.config)
|
||
|
t.type(reply.context.config, Object)
|
||
|
t.ok(reply.context.config.foo)
|
||
|
t.equal(reply.context.config.foo, 'bar')
|
||
|
reply.send()
|
||
|
})
|
||
|
|
||
|
instance.listen(0, (err) => {
|
||
|
instance.server.unref()
|
||
|
if (err) t.threw(err)
|
||
|
http.get(getUrl(instance), () => {}).on('error', t.threw)
|
||
|
})
|
||
|
})
|