-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
use.js
95 lines (78 loc) · 2.24 KB
/
use.js
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('http://test.com/');
assert(request_ instanceof NewRequest);
assert(request_ instanceof OriginalRequest);
});
});