1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
const assert = require('assert');
const getSetup = require('./support/setup');
const request = require('./support/client');
describe('request', function () {
let setup;
let uri;
before(async function () {
setup = await getSetup();
uri = setup.uri;
});
this.timeout(20_000);
describe('use', () => {
it('should use plugin success', (done) => {
const now = `${Date.now()}`;
function uuid(request_) {
request_.set('X-UUID', now);
return request_;
}
function prefix(request_) {
request_.url = uri + request_.url;
return request_;
}
request
.get('/echo')
.use(uuid)
.use(prefix)
.end((error, res) => {
assert.strictEqual(res.statusCode, 200);
assert.equal(res.get('X-UUID'), now);
done();
});
});
});
});
describe('subclass', () => {
let OriginalRequest;
beforeEach(() => {
OriginalRequest = request.Request;
});
afterEach(() => {
request.Request = OriginalRequest;
});
it('should be an instance of Request', () => {
const request_ = request.get('/');
assert(request_ instanceof request.Request);
});
it('should use patched subclass', () => {
assert(OriginalRequest);
let constructorCalled;
let sendCalled;
function NewRequest(...args) {
constructorCalled = true;
OriginalRequest.apply(this, args);
}
NewRequest.prototype = Object.create(OriginalRequest.prototype);
NewRequest.prototype.send = function () {
sendCalled = true;
return this;
};
request.Request = NewRequest;
const request_ = request.get('/').send();
assert(constructorCalled);
assert(sendCalled);
assert(request_ instanceof NewRequest);
assert(request_ instanceof OriginalRequest);
});
it('should use patched subclass in agent too', () => {
if (!request.agent) return; // Node-only
function NewRequest(...args) {
OriginalRequest.apply(this, args);
}
NewRequest.prototype = Object.create(OriginalRequest.prototype);
request.Request = NewRequest;
const request_ = request.agent().del('/');
assert(request_ instanceof NewRequest);
assert(request_ instanceof OriginalRequest);
});
});
|