@eggjs/supertest 8.1.1 → 8.3.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -63
- package/dist/agent.d.ts +33 -0
- package/dist/agent.js +74 -0
- package/dist/error/AssertError.d.ts +8 -0
- package/dist/error/AssertError.js +15 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +24 -0
- package/dist/request.d.ts +25 -0
- package/dist/request.js +51 -0
- package/dist/test.d.ts +100 -0
- package/dist/test.js +237 -0
- package/dist/types.d.ts +14 -0
- package/package.json +29 -54
- package/dist/commonjs/agent.d.ts +0 -27
- package/dist/commonjs/agent.js +0 -91
- package/dist/commonjs/error/AssertError.d.ts +0 -5
- package/dist/commonjs/error/AssertError.js +0 -16
- package/dist/commonjs/index.d.ts +0 -14
- package/dist/commonjs/index.js +0 -47
- package/dist/commonjs/package.json +0 -3
- package/dist/commonjs/request.d.ts +0 -20
- package/dist/commonjs/request.js +0 -60
- package/dist/commonjs/test.d.ts +0 -96
- package/dist/commonjs/test.js +0 -326
- package/dist/commonjs/types.d.ts +0 -10
- package/dist/commonjs/types.js +0 -3
- package/dist/esm/agent.d.ts +0 -27
- package/dist/esm/agent.js +0 -84
- package/dist/esm/error/AssertError.d.ts +0 -5
- package/dist/esm/error/AssertError.js +0 -12
- package/dist/esm/index.d.ts +0 -14
- package/dist/esm/index.js +0 -30
- package/dist/esm/package.json +0 -3
- package/dist/esm/request.d.ts +0 -20
- package/dist/esm/request.js +0 -53
- package/dist/esm/test.d.ts +0 -96
- package/dist/esm/test.js +0 -322
- package/dist/esm/types.d.ts +0 -10
- package/dist/esm/types.js +0 -2
- package/dist/package.json +0 -4
- package/src/agent.ts +0 -93
- package/src/error/AssertError.ts +0 -12
- package/src/index.ts +0 -39
- package/src/request.ts +0 -59
- package/src/test.ts +0 -372
- package/src/types.ts +0 -17
package/dist/esm/request.js
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import http from 'node:http';
|
|
2
|
-
import http2 from 'node:http2';
|
|
3
|
-
import { Test } from './test.js';
|
|
4
|
-
export class Request {
|
|
5
|
-
app;
|
|
6
|
-
#http2 = false;
|
|
7
|
-
constructor(appOrListener, options = {}) {
|
|
8
|
-
if (typeof appOrListener === 'function') {
|
|
9
|
-
if (options.http2) {
|
|
10
|
-
this.#http2 = true;
|
|
11
|
-
this.app = http2.createServer(appOrListener); // eslint-disable-line no-param-reassign
|
|
12
|
-
}
|
|
13
|
-
else {
|
|
14
|
-
this.app = http.createServer(appOrListener); // eslint-disable-line no-param-reassign
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
this.app = appOrListener;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
_testRequest(method, url) {
|
|
22
|
-
const req = new Test(this.app, method.toUpperCase(), url);
|
|
23
|
-
if (this.#http2) {
|
|
24
|
-
req.http2();
|
|
25
|
-
}
|
|
26
|
-
return req;
|
|
27
|
-
}
|
|
28
|
-
delete(url) {
|
|
29
|
-
return this._testRequest('delete', url);
|
|
30
|
-
}
|
|
31
|
-
del(url) {
|
|
32
|
-
return this._testRequest('delete', url);
|
|
33
|
-
}
|
|
34
|
-
get(url) {
|
|
35
|
-
return this._testRequest('get', url);
|
|
36
|
-
}
|
|
37
|
-
head(url) {
|
|
38
|
-
return this._testRequest('head', url);
|
|
39
|
-
}
|
|
40
|
-
put(url) {
|
|
41
|
-
return this._testRequest('put', url);
|
|
42
|
-
}
|
|
43
|
-
post(url) {
|
|
44
|
-
return this._testRequest('post', url);
|
|
45
|
-
}
|
|
46
|
-
patch(url) {
|
|
47
|
-
return this._testRequest('patch', url);
|
|
48
|
-
}
|
|
49
|
-
options(url) {
|
|
50
|
-
return this._testRequest('options', url);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFHL0IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU1qQyxNQUFNLE9BQU8sT0FBTztJQUNsQixHQUFHLENBQWtCO0lBQ3JCLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFFZixZQUFZLGFBQWtCLEVBQUUsVUFBMEIsRUFBRTtRQUMxRCxJQUFJLE9BQU8sYUFBYSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3hDLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWtDLENBQUMsQ0FBQyxDQUFDLHdDQUF3QztZQUM3RyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWtDLENBQUMsQ0FBQyxDQUFDLHdDQUF3QztZQUM1RyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVTLFlBQVksQ0FBQyxNQUFjLEVBQUUsR0FBVztRQUNoRCxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsR0FBRyxDQUFDLEdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxHQUFHLENBQUMsR0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELElBQUksQ0FBQyxHQUFXO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsR0FBRyxDQUFDLEdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxJQUFJLENBQUMsR0FBVztRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNELEtBQUssQ0FBQyxHQUFXO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQVc7UUFDakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0YifQ==
|
package/dist/esm/test.d.ts
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import type { Server } from 'node:net';
|
|
2
|
-
import { Request, type Response } from 'superagent';
|
|
3
|
-
import { AssertError } from './error/AssertError.js';
|
|
4
|
-
export type TestApplication = Server | string;
|
|
5
|
-
export type AssertFunction = (res: Response) => AssertError | void;
|
|
6
|
-
export type CallbackFunction = (err: AssertError | Error | null, res: Response) => void;
|
|
7
|
-
export type ResponseError = Error & {
|
|
8
|
-
syscall?: string;
|
|
9
|
-
code?: string;
|
|
10
|
-
status?: number;
|
|
11
|
-
};
|
|
12
|
-
export interface ExpectHeader {
|
|
13
|
-
name: string;
|
|
14
|
-
value: string | number | RegExp;
|
|
15
|
-
}
|
|
16
|
-
export declare class Test extends Request {
|
|
17
|
-
app: TestApplication;
|
|
18
|
-
_server: Server;
|
|
19
|
-
_asserts: AssertFunction[];
|
|
20
|
-
/**
|
|
21
|
-
* Initialize a new `Test` with the given `app`,
|
|
22
|
-
* request `method` and `path`.
|
|
23
|
-
*/
|
|
24
|
-
constructor(app: TestApplication, method: string, path: string);
|
|
25
|
-
/**
|
|
26
|
-
* Returns a URL, extracted from a server.
|
|
27
|
-
*
|
|
28
|
-
* @return {String} URL address
|
|
29
|
-
* @private
|
|
30
|
-
*/
|
|
31
|
-
protected serverAddress(app: Server, path: string): string;
|
|
32
|
-
/**
|
|
33
|
-
* Expectations:
|
|
34
|
-
*
|
|
35
|
-
* ```js
|
|
36
|
-
* .expect(200)
|
|
37
|
-
* .expect(200, fn)
|
|
38
|
-
* .expect(200, body)
|
|
39
|
-
* .expect('Some body')
|
|
40
|
-
* .expect('Some body', fn)
|
|
41
|
-
* .expect(['json array body', { key: 'val' }])
|
|
42
|
-
* .expect('Content-Type', 'application/json')
|
|
43
|
-
* .expect('Content-Type', 'application/json', fn)
|
|
44
|
-
* .expect(fn)
|
|
45
|
-
* .expect([200, 404])
|
|
46
|
-
* ```
|
|
47
|
-
*
|
|
48
|
-
* @return {Test} The current Test instance for chaining.
|
|
49
|
-
*/
|
|
50
|
-
expect(a: number | string | RegExp | object | AssertFunction, b?: string | number | RegExp | CallbackFunction, c?: CallbackFunction): Test;
|
|
51
|
-
/**
|
|
52
|
-
* UnExpectations:
|
|
53
|
-
*
|
|
54
|
-
* .unexpectHeader('Content-Type')
|
|
55
|
-
* .unexpectHeader('Content-Type', fn)
|
|
56
|
-
*/
|
|
57
|
-
unexpectHeader(name: string, fn?: CallbackFunction): this;
|
|
58
|
-
/**
|
|
59
|
-
* Expectations:
|
|
60
|
-
*
|
|
61
|
-
* .expectHeader('Content-Type')
|
|
62
|
-
* .expectHeader('Content-Type', fn)
|
|
63
|
-
*/
|
|
64
|
-
expectHeader(name: string, fn?: CallbackFunction): this;
|
|
65
|
-
_unexpectHeader(name: string, res: Response): AssertError | undefined;
|
|
66
|
-
_expectHeader(name: string, res: Response): AssertError | undefined;
|
|
67
|
-
/**
|
|
68
|
-
* Defer invoking superagent's `.end()` until
|
|
69
|
-
* the server is listening.
|
|
70
|
-
*/
|
|
71
|
-
end(fn: CallbackFunction): this;
|
|
72
|
-
/**
|
|
73
|
-
* Perform assertions and invoke `fn(err, res)`.
|
|
74
|
-
*/
|
|
75
|
-
assert(resError: ResponseError | null, res: Response, fn: CallbackFunction): void;
|
|
76
|
-
/**
|
|
77
|
-
* Perform assertions on a response body and return an Error upon failure.
|
|
78
|
-
*/
|
|
79
|
-
_assertBody(body: RegExp | string | number | object | null | undefined, res: Response): AssertError | undefined;
|
|
80
|
-
/**
|
|
81
|
-
* Perform assertions on a response header and return an Error upon failure.
|
|
82
|
-
*/
|
|
83
|
-
_assertHeader(header: ExpectHeader, res: Response): AssertError | undefined;
|
|
84
|
-
/**
|
|
85
|
-
* Perform assertions on the response status and return an Error upon failure.
|
|
86
|
-
*/
|
|
87
|
-
_assertStatus(status: number, res: Response): AssertError | undefined;
|
|
88
|
-
/**
|
|
89
|
-
* Perform assertions on the response status and return an Error upon failure.
|
|
90
|
-
*/
|
|
91
|
-
_assertStatusArray(statusArray: number[], res: Response): AssertError | undefined;
|
|
92
|
-
/**
|
|
93
|
-
* Performs an assertion by calling a function and return an Error upon failure.
|
|
94
|
-
*/
|
|
95
|
-
_assertFunction(fn: AssertFunction, res: Response): Error | undefined;
|
|
96
|
-
}
|
package/dist/esm/test.js
DELETED
|
@@ -1,322 +0,0 @@
|
|
|
1
|
-
import { inspect } from 'node:util';
|
|
2
|
-
import { STATUS_CODES } from 'node:http';
|
|
3
|
-
import { Server as HttpsServer } from 'node:tls';
|
|
4
|
-
import { deepStrictEqual } from 'node:assert';
|
|
5
|
-
import { Request } from 'superagent';
|
|
6
|
-
import { AssertError } from './error/AssertError.js';
|
|
7
|
-
export class Test extends Request {
|
|
8
|
-
app;
|
|
9
|
-
_server;
|
|
10
|
-
_asserts = [];
|
|
11
|
-
/**
|
|
12
|
-
* Initialize a new `Test` with the given `app`,
|
|
13
|
-
* request `method` and `path`.
|
|
14
|
-
*/
|
|
15
|
-
constructor(app, method, path) {
|
|
16
|
-
super(method.toUpperCase(), path);
|
|
17
|
-
this.redirects(0);
|
|
18
|
-
this.buffer();
|
|
19
|
-
this.app = app;
|
|
20
|
-
this.url = typeof app === 'string'
|
|
21
|
-
? app + path
|
|
22
|
-
: this.serverAddress(app, path);
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Returns a URL, extracted from a server.
|
|
26
|
-
*
|
|
27
|
-
* @return {String} URL address
|
|
28
|
-
* @private
|
|
29
|
-
*/
|
|
30
|
-
serverAddress(app, path) {
|
|
31
|
-
const addr = app.address();
|
|
32
|
-
if (!addr) {
|
|
33
|
-
this._server = app.listen(0);
|
|
34
|
-
}
|
|
35
|
-
const port = app.address().port;
|
|
36
|
-
const protocol = (app instanceof HttpsServer || this._server instanceof HttpsServer) ? 'https' : 'http';
|
|
37
|
-
return `${protocol}://127.0.0.1:${port}${path}`;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Expectations:
|
|
41
|
-
*
|
|
42
|
-
* ```js
|
|
43
|
-
* .expect(200)
|
|
44
|
-
* .expect(200, fn)
|
|
45
|
-
* .expect(200, body)
|
|
46
|
-
* .expect('Some body')
|
|
47
|
-
* .expect('Some body', fn)
|
|
48
|
-
* .expect(['json array body', { key: 'val' }])
|
|
49
|
-
* .expect('Content-Type', 'application/json')
|
|
50
|
-
* .expect('Content-Type', 'application/json', fn)
|
|
51
|
-
* .expect(fn)
|
|
52
|
-
* .expect([200, 404])
|
|
53
|
-
* ```
|
|
54
|
-
*
|
|
55
|
-
* @return {Test} The current Test instance for chaining.
|
|
56
|
-
*/
|
|
57
|
-
expect(a, b, c) {
|
|
58
|
-
// callback
|
|
59
|
-
if (typeof a === 'function') {
|
|
60
|
-
// .expect(fn)
|
|
61
|
-
this._asserts.push(wrapAssertFn(a));
|
|
62
|
-
return this;
|
|
63
|
-
}
|
|
64
|
-
if (typeof b === 'function') {
|
|
65
|
-
// .expect('Some body', fn)
|
|
66
|
-
this.end(b);
|
|
67
|
-
}
|
|
68
|
-
if (typeof c === 'function') {
|
|
69
|
-
// .expect('Content-Type', 'application/json', fn)
|
|
70
|
-
this.end(c);
|
|
71
|
-
}
|
|
72
|
-
// status
|
|
73
|
-
if (typeof a === 'number') {
|
|
74
|
-
this._asserts.push(wrapAssertFn(this._assertStatus.bind(this, a)));
|
|
75
|
-
// body
|
|
76
|
-
if (typeof b !== 'function' && arguments.length > 1) {
|
|
77
|
-
// .expect(200, 'body')
|
|
78
|
-
// .expect(200, null)
|
|
79
|
-
// .expect(200, 9999999)
|
|
80
|
-
this._asserts.push(wrapAssertFn(this._assertBody.bind(this, b)));
|
|
81
|
-
}
|
|
82
|
-
return this;
|
|
83
|
-
}
|
|
84
|
-
// multiple statuses
|
|
85
|
-
if (Array.isArray(a) && a.length > 0 && a.every(val => typeof val === 'number')) {
|
|
86
|
-
// .expect([200, 300])
|
|
87
|
-
this._asserts.push(wrapAssertFn(this._assertStatusArray.bind(this, a)));
|
|
88
|
-
return this;
|
|
89
|
-
}
|
|
90
|
-
// header field
|
|
91
|
-
if (typeof b === 'string' || typeof b === 'number' || b instanceof RegExp) {
|
|
92
|
-
// .expect('Content-Type', 'application/json')
|
|
93
|
-
// .expect('Content-Type', /json/)
|
|
94
|
-
this._asserts.push(wrapAssertFn(this._assertHeader.bind(this, { name: String(a), value: b })));
|
|
95
|
-
return this;
|
|
96
|
-
}
|
|
97
|
-
// body
|
|
98
|
-
// .expect('body')
|
|
99
|
-
// .expect(['json array body', { key: 'val' }])
|
|
100
|
-
// .expect(/foo/)
|
|
101
|
-
this._asserts.push(wrapAssertFn(this._assertBody.bind(this, a)));
|
|
102
|
-
return this;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* UnExpectations:
|
|
106
|
-
*
|
|
107
|
-
* .unexpectHeader('Content-Type')
|
|
108
|
-
* .unexpectHeader('Content-Type', fn)
|
|
109
|
-
*/
|
|
110
|
-
unexpectHeader(name, fn) {
|
|
111
|
-
if (typeof fn === 'function') {
|
|
112
|
-
this.end(fn);
|
|
113
|
-
}
|
|
114
|
-
// header
|
|
115
|
-
if (typeof name === 'string') {
|
|
116
|
-
this._asserts.push(this._unexpectHeader.bind(this, name));
|
|
117
|
-
}
|
|
118
|
-
return this;
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Expectations:
|
|
122
|
-
*
|
|
123
|
-
* .expectHeader('Content-Type')
|
|
124
|
-
* .expectHeader('Content-Type', fn)
|
|
125
|
-
*/
|
|
126
|
-
expectHeader(name, fn) {
|
|
127
|
-
if (typeof fn === 'function') {
|
|
128
|
-
this.end(fn);
|
|
129
|
-
}
|
|
130
|
-
// header
|
|
131
|
-
if (typeof name === 'string') {
|
|
132
|
-
this._asserts.push(this._expectHeader.bind(this, name));
|
|
133
|
-
}
|
|
134
|
-
return this;
|
|
135
|
-
}
|
|
136
|
-
_unexpectHeader(name, res) {
|
|
137
|
-
const actual = res.headers[name.toLowerCase()];
|
|
138
|
-
if (actual) {
|
|
139
|
-
return new AssertError('unexpected "' + name + '" header field, got "' + actual + '"', name, actual);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
_expectHeader(name, res) {
|
|
143
|
-
const actual = res.headers[name.toLowerCase()];
|
|
144
|
-
if (!actual) {
|
|
145
|
-
return new AssertError('expected "' + name + '" header field', name, actual);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Defer invoking superagent's `.end()` until
|
|
150
|
-
* the server is listening.
|
|
151
|
-
*/
|
|
152
|
-
end(fn) {
|
|
153
|
-
const server = this._server;
|
|
154
|
-
super.end((err, res) => {
|
|
155
|
-
const localAssert = () => {
|
|
156
|
-
this.assert(err, res, fn);
|
|
157
|
-
};
|
|
158
|
-
if (server && '_handle' in server && server._handle) {
|
|
159
|
-
return server.close(localAssert);
|
|
160
|
-
}
|
|
161
|
-
localAssert();
|
|
162
|
-
});
|
|
163
|
-
return this;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Perform assertions and invoke `fn(err, res)`.
|
|
167
|
-
*/
|
|
168
|
-
assert(resError, res, fn) {
|
|
169
|
-
let errorObj;
|
|
170
|
-
// check for unexpected network errors or server not running/reachable errors
|
|
171
|
-
// when there is no response and superagent sends back a System Error
|
|
172
|
-
// do not check further for other asserts, if any, in such case
|
|
173
|
-
// https://nodejs.org/api/errors.html#errors_common_system_errors
|
|
174
|
-
const sysErrors = {
|
|
175
|
-
ECONNREFUSED: 'Connection refused',
|
|
176
|
-
ECONNRESET: 'Connection reset by peer',
|
|
177
|
-
EPIPE: 'Broken pipe',
|
|
178
|
-
ETIMEDOUT: 'Operation timed out',
|
|
179
|
-
};
|
|
180
|
-
if (!res && resError) {
|
|
181
|
-
if (resError instanceof Error
|
|
182
|
-
&& resError.syscall === 'connect'
|
|
183
|
-
&& resError.code
|
|
184
|
-
&& sysErrors[resError.code]) {
|
|
185
|
-
errorObj = new Error(resError.code + ': ' + sysErrors[resError.code]);
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
errorObj = resError;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
// asserts
|
|
192
|
-
for (let i = 0; i < this._asserts.length && !errorObj; i += 1) {
|
|
193
|
-
errorObj = this._assertFunction(this._asserts[i], res);
|
|
194
|
-
}
|
|
195
|
-
// set unexpected superagent error if no other error has occurred.
|
|
196
|
-
if (!errorObj && resError instanceof Error && (!res || resError.status !== res.status)) {
|
|
197
|
-
errorObj = resError;
|
|
198
|
-
}
|
|
199
|
-
fn.call(this, errorObj || null, res);
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Perform assertions on a response body and return an Error upon failure.
|
|
203
|
-
*/
|
|
204
|
-
_assertBody(body, res) {
|
|
205
|
-
const isRegexp = body instanceof RegExp;
|
|
206
|
-
// parsed
|
|
207
|
-
if (typeof body === 'object' && !isRegexp) {
|
|
208
|
-
try {
|
|
209
|
-
deepStrictEqual(body, res.body);
|
|
210
|
-
}
|
|
211
|
-
catch (err) {
|
|
212
|
-
const a = inspect(body);
|
|
213
|
-
const b = inspect(res.body);
|
|
214
|
-
return new AssertError('expected ' + a + ' response body, got ' + b, body, res.body, { cause: err });
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
else if (body !== res.text) {
|
|
218
|
-
// string
|
|
219
|
-
const a = inspect(body);
|
|
220
|
-
const b = inspect(res.text);
|
|
221
|
-
// regexp
|
|
222
|
-
if (isRegexp) {
|
|
223
|
-
if (!body.test(res.text)) {
|
|
224
|
-
return new AssertError('expected body ' + b + ' to match ' + body, body, res.body);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
return new AssertError('expected ' + a + ' response body, got ' + b, body, res.body);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Perform assertions on a response header and return an Error upon failure.
|
|
234
|
-
*/
|
|
235
|
-
_assertHeader(header, res) {
|
|
236
|
-
const field = header.name;
|
|
237
|
-
const actual = res.header[field.toLowerCase()];
|
|
238
|
-
const fieldExpected = header.value;
|
|
239
|
-
if (typeof actual === 'undefined') {
|
|
240
|
-
return new AssertError('expected "' + field + '" header field', header, actual);
|
|
241
|
-
}
|
|
242
|
-
// This check handles header values that may be a String or single element Array
|
|
243
|
-
if ((Array.isArray(actual) && actual.toString() === fieldExpected)
|
|
244
|
-
|| fieldExpected === actual) {
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
if (fieldExpected instanceof RegExp) {
|
|
248
|
-
if (!fieldExpected.test(actual)) {
|
|
249
|
-
return new AssertError('expected "' + field + '" matching '
|
|
250
|
-
+ fieldExpected + ', got "' + actual + '"', header, actual);
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
return new AssertError('expected "' + field + '" of "' + fieldExpected + '", got "' + actual + '"', header, actual);
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Perform assertions on the response status and return an Error upon failure.
|
|
259
|
-
*/
|
|
260
|
-
_assertStatus(status, res) {
|
|
261
|
-
if (res.status !== status) {
|
|
262
|
-
const a = STATUS_CODES[status];
|
|
263
|
-
const b = STATUS_CODES[res.status];
|
|
264
|
-
return new AssertError('expected ' + status + ' "' + a + '", got ' + res.status + ' "' + b + '"', status, res.status);
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Perform assertions on the response status and return an Error upon failure.
|
|
269
|
-
*/
|
|
270
|
-
_assertStatusArray(statusArray, res) {
|
|
271
|
-
if (!statusArray.includes(res.status)) {
|
|
272
|
-
const b = STATUS_CODES[res.status];
|
|
273
|
-
const expectedList = statusArray.join(', ');
|
|
274
|
-
return new AssertError('expected one of "' + expectedList + '", got ' + res.status + ' "' + b + '"', statusArray, res.status);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
/**
|
|
278
|
-
* Performs an assertion by calling a function and return an Error upon failure.
|
|
279
|
-
*/
|
|
280
|
-
_assertFunction(fn, res) {
|
|
281
|
-
let err;
|
|
282
|
-
try {
|
|
283
|
-
err = fn(res);
|
|
284
|
-
}
|
|
285
|
-
catch (e) {
|
|
286
|
-
err = e;
|
|
287
|
-
}
|
|
288
|
-
if (err instanceof Error) {
|
|
289
|
-
return err;
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* Wraps an assert function into another.
|
|
295
|
-
* The wrapper function edit the stack trace of any assertion error, prepending a more useful stack to it.
|
|
296
|
-
*
|
|
297
|
-
* @param {Function} assertFn
|
|
298
|
-
* @return {Function} wrapped assert function
|
|
299
|
-
*/
|
|
300
|
-
function wrapAssertFn(assertFn) {
|
|
301
|
-
const savedStack = new Error().stack.split('\n').slice(3);
|
|
302
|
-
return (res) => {
|
|
303
|
-
let badStack;
|
|
304
|
-
let err;
|
|
305
|
-
try {
|
|
306
|
-
err = assertFn(res);
|
|
307
|
-
}
|
|
308
|
-
catch (e) {
|
|
309
|
-
err = e;
|
|
310
|
-
}
|
|
311
|
-
if (err instanceof Error && err.stack) {
|
|
312
|
-
badStack = err.stack.replace(err.message, '').split('\n').slice(1);
|
|
313
|
-
err.stack = [err.toString()]
|
|
314
|
-
.concat(savedStack)
|
|
315
|
-
.concat('----')
|
|
316
|
-
.concat(badStack)
|
|
317
|
-
.join('\n');
|
|
318
|
-
}
|
|
319
|
-
return err;
|
|
320
|
-
};
|
|
321
|
-
}
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN6QyxPQUFPLEVBQUUsTUFBTSxJQUFJLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQWlCLE1BQU0sWUFBWSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVlyRCxNQUFNLE9BQU8sSUFBSyxTQUFRLE9BQU87SUFDL0IsR0FBRyxDQUFrQjtJQUNyQixPQUFPLENBQVM7SUFDaEIsUUFBUSxHQUFxQixFQUFFLENBQUM7SUFFaEM7OztPQUdHO0lBQ0gsWUFBWSxHQUFvQixFQUFFLE1BQWMsRUFBRSxJQUFZO1FBQzVELEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxHQUFHLEtBQUssUUFBUTtZQUNoQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUk7WUFDWixDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sYUFBYSxDQUFDLEdBQVcsRUFBRSxJQUFZO1FBQy9DLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQWtCLENBQUMsSUFBSSxDQUFDO1FBQ2pELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxZQUFZLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxZQUFZLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUN4RyxPQUFPLEdBQUcsUUFBUSxnQkFBZ0IsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSCxNQUFNLENBQUMsQ0FBcUQsRUFBRSxDQUErQyxFQUFFLENBQW9CO1FBQ2pJLFdBQVc7UUFDWCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzVCLGNBQWM7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBbUIsQ0FBQyxDQUFDLENBQUM7WUFDdEQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM1QiwyQkFBMkI7WUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzVCLGtEQUFrRDtZQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsQ0FBQztRQUVELFNBQVM7UUFDVCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25FLE9BQU87WUFDUCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFVBQVUsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNwRCx1QkFBdUI7Z0JBQ3ZCLHFCQUFxQjtnQkFDckIsd0JBQXdCO2dCQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRSxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsb0JBQW9CO1FBQ3BCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNoRixzQkFBc0I7WUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxlQUFlO1FBQ2YsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsWUFBWSxNQUFNLEVBQUUsQ0FBQztZQUMxRSw4Q0FBOEM7WUFDOUMsa0NBQWtDO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvRixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPO1FBQ1Asa0JBQWtCO1FBQ2xCLCtDQUErQztRQUMvQyxpQkFBaUI7UUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxjQUFjLENBQUMsSUFBWSxFQUFFLEVBQXFCO1FBQ2hELElBQUksT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLENBQUM7UUFFRCxTQUFTO1FBQ1QsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLENBQUMsSUFBWSxFQUFFLEVBQXFCO1FBQzlDLElBQUksT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLENBQUM7UUFFRCxTQUFTO1FBQ1QsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQVksRUFBRSxHQUFhO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDL0MsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE9BQU8sSUFBSSxXQUFXLENBQUMsY0FBYyxHQUFHLElBQUksR0FBRyx1QkFBdUIsR0FBRyxNQUFNLEdBQUcsR0FBRyxFQUNuRixJQUFJLEVBQUUsTUFBTSxDQUNiLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFZLEVBQUUsR0FBYTtRQUN2QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sSUFBSSxXQUFXLENBQUMsWUFBWSxHQUFHLElBQUksR0FBRyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0UsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxHQUFHLENBQUMsRUFBb0I7UUFDdEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUU1QixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3JCLE1BQU0sV0FBVyxHQUFHLEdBQUcsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLENBQUMsQ0FBQztZQUVGLElBQUksTUFBTSxJQUFJLFNBQVMsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNwRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUVELFdBQVcsRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsUUFBOEIsRUFBRSxHQUFhLEVBQUUsRUFBb0I7UUFDeEUsSUFBSSxRQUEyQixDQUFDO1FBRWhDLDZFQUE2RTtRQUM3RSxxRUFBcUU7UUFDckUsK0RBQStEO1FBQy9ELGlFQUFpRTtRQUNqRSxNQUFNLFNBQVMsR0FBMkI7WUFDeEMsWUFBWSxFQUFFLG9CQUFvQjtZQUNsQyxVQUFVLEVBQUUsMEJBQTBCO1lBQ3RDLEtBQUssRUFBRSxhQUFhO1lBQ3BCLFNBQVMsRUFBRSxxQkFBcUI7U0FDakMsQ0FBQztRQUVGLElBQUksQ0FBQyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7WUFDckIsSUFBSSxRQUFRLFlBQVksS0FBSzttQkFDeEIsUUFBUSxDQUFDLE9BQU8sS0FBSyxTQUFTO21CQUM5QixRQUFRLENBQUMsSUFBSTttQkFDYixTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDeEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7UUFFRCxVQUFVO1FBQ1YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM5RCxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN2RixRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxJQUEwRCxFQUFFLEdBQWE7UUFDbkYsTUFBTSxRQUFRLEdBQUcsSUFBSSxZQUFZLE1BQU0sQ0FBQztRQUV4QyxTQUFTO1FBQ1QsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUM7Z0JBQ0gsZUFBZSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QixNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1QixPQUFPLElBQUksV0FBVyxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsc0JBQXNCLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDdkcsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0IsU0FBUztZQUNULE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QixNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTVCLFNBQVM7WUFDVCxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUN6QixPQUFPLElBQUksV0FBVyxDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JGLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxJQUFJLFdBQVcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLHNCQUFzQixHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZGLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLE1BQW9CLEVBQUUsR0FBYTtRQUMvQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDL0MsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUVuQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxXQUFXLENBQUMsWUFBWSxHQUFHLEtBQUssR0FBRyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEYsQ0FBQztRQUNELGdGQUFnRjtRQUNoRixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssYUFBYSxDQUFDO2VBQzdELGFBQWEsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM5QixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksYUFBYSxZQUFZLE1BQU0sRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sSUFBSSxXQUFXLENBQUMsWUFBWSxHQUFHLEtBQUssR0FBRyxhQUFhO3NCQUN2RCxhQUFhLEdBQUcsU0FBUyxHQUFHLE1BQU0sR0FBRyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2hFLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sSUFBSSxXQUFXLENBQUMsWUFBWSxHQUFHLEtBQUssR0FBRyxRQUFRLEdBQUcsYUFBYSxHQUFHLFVBQVUsR0FBRyxNQUFNLEdBQUcsR0FBRyxFQUNoRyxNQUFNLEVBQUUsTUFBTSxDQUNmLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLE1BQWMsRUFBRSxHQUFhO1FBQ3pDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUMxQixNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxPQUFPLElBQUksV0FBVyxDQUFDLFdBQVcsR0FBRyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFDOUYsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQ25CLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCLENBQUMsV0FBcUIsRUFBRSxHQUFhO1FBQ3JELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkMsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxPQUFPLElBQUksV0FBVyxDQUNwQixtQkFBbUIsR0FBRyxZQUFZLEdBQUcsU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQzVFLFdBQVcsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUN4QixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxFQUFrQixFQUFFLEdBQWE7UUFDL0MsSUFBSSxHQUFHLENBQUM7UUFDUixJQUFJLENBQUM7WUFDSCxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNWLENBQUM7UUFDRCxJQUFJLEdBQUcsWUFBWSxLQUFLLEVBQUUsQ0FBQztZQUN6QixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRDs7Ozs7O0dBTUc7QUFFSCxTQUFTLFlBQVksQ0FBQyxRQUF3QjtJQUM1QyxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLEtBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTNELE9BQU8sQ0FBQyxHQUFhLEVBQUUsRUFBRTtRQUN2QixJQUFJLFFBQVEsQ0FBQztRQUNiLElBQUksR0FBRyxDQUFDO1FBQ1IsSUFBSSxDQUFDO1lBQ0gsR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsQ0FBQztRQUNELElBQUksR0FBRyxZQUFZLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRSxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFFO2lCQUMzQixNQUFNLENBQUMsVUFBVSxDQUFDO2lCQUNsQixNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUNkLE1BQU0sQ0FBQyxRQUFRLENBQUM7aUJBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLENBQUM7QUFDSixDQUFDIn0=
|
package/dist/esm/types.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { RequestListener } from 'node:http';
|
|
2
|
-
import type { Http2ServerRequest, Http2ServerResponse } from 'node:http2';
|
|
3
|
-
import type { Server } from 'node:net';
|
|
4
|
-
import type { AgentOptions as SAgentOptions } from 'superagent';
|
|
5
|
-
export type H2RequestListener = (request: Http2ServerRequest, response: Http2ServerResponse) => void;
|
|
6
|
-
export type H1RequestListener = RequestListener;
|
|
7
|
-
export type App = Server | H1RequestListener | H2RequestListener | string;
|
|
8
|
-
export interface AgentOptions extends SAgentOptions {
|
|
9
|
-
http2?: boolean;
|
|
10
|
-
}
|
package/dist/esm/types.js
DELETED
package/dist/package.json
DELETED
package/src/agent.ts
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import http from 'node:http';
|
|
2
|
-
import http2 from 'node:http2';
|
|
3
|
-
import type { Server } from 'node:net';
|
|
4
|
-
import { agent as Agent } from 'superagent';
|
|
5
|
-
import { Test } from './test.js';
|
|
6
|
-
import type { AgentOptions, H1RequestListener, H2RequestListener, App } from './types.js';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Initialize a new `TestAgent`.
|
|
10
|
-
*
|
|
11
|
-
* @param {Function|Server} app
|
|
12
|
-
* @param {Object} options
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
export class TestAgent extends Agent {
|
|
16
|
-
app: Server | string;
|
|
17
|
-
_host: string;
|
|
18
|
-
#http2 = false;
|
|
19
|
-
|
|
20
|
-
constructor(appOrListener: App, options: AgentOptions = {}) {
|
|
21
|
-
super(options);
|
|
22
|
-
if (typeof appOrListener === 'function') {
|
|
23
|
-
if (options.http2) {
|
|
24
|
-
this.#http2 = true;
|
|
25
|
-
this.app = http2.createServer(appOrListener as H2RequestListener); // eslint-disable-line no-param-reassign
|
|
26
|
-
} else {
|
|
27
|
-
this.app = http.createServer(appOrListener as H1RequestListener); // eslint-disable-line no-param-reassign
|
|
28
|
-
}
|
|
29
|
-
} else {
|
|
30
|
-
this.app = appOrListener;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// set a host name
|
|
35
|
-
host(host: string) {
|
|
36
|
-
this._host = host;
|
|
37
|
-
return this;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// TestAgent.prototype.del = TestAgent.prototype.delete;
|
|
41
|
-
|
|
42
|
-
protected _testRequest(method: string, url: string) {
|
|
43
|
-
const req = new Test(this.app, method.toUpperCase(), url);
|
|
44
|
-
if (this.#http2) {
|
|
45
|
-
req.http2();
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (this._host) {
|
|
49
|
-
req.set('host', this._host);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const that = this as any;
|
|
53
|
-
// access not internal methods
|
|
54
|
-
req.on('response', that._saveCookies.bind(this));
|
|
55
|
-
req.on('redirect', that._saveCookies.bind(this));
|
|
56
|
-
req.on('redirect', that._attachCookies.bind(this, req));
|
|
57
|
-
that._setDefaults(req);
|
|
58
|
-
that._attachCookies(req);
|
|
59
|
-
|
|
60
|
-
return req;
|
|
61
|
-
}
|
|
62
|
-
delete(url: string) {
|
|
63
|
-
return this._testRequest('delete', url);
|
|
64
|
-
}
|
|
65
|
-
del(url: string) {
|
|
66
|
-
return this._testRequest('delete', url);
|
|
67
|
-
}
|
|
68
|
-
get(url: string) {
|
|
69
|
-
return this._testRequest('get', url);
|
|
70
|
-
}
|
|
71
|
-
head(url: string) {
|
|
72
|
-
return this._testRequest('head', url);
|
|
73
|
-
}
|
|
74
|
-
put(url: string) {
|
|
75
|
-
return this._testRequest('put', url);
|
|
76
|
-
}
|
|
77
|
-
post(url: string) {
|
|
78
|
-
return this._testRequest('post', url);
|
|
79
|
-
}
|
|
80
|
-
patch(url: string) {
|
|
81
|
-
return this._testRequest('patch', url);
|
|
82
|
-
}
|
|
83
|
-
options(url: string) {
|
|
84
|
-
return this._testRequest('options', url);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// allow keep use by `agent()`
|
|
89
|
-
export const proxyAgent = new Proxy(TestAgent, {
|
|
90
|
-
apply(target, _, argumentsList) {
|
|
91
|
-
return new target(argumentsList[0], argumentsList[1]);
|
|
92
|
-
},
|
|
93
|
-
});
|
package/src/error/AssertError.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export class AssertError extends Error {
|
|
2
|
-
expected: any;
|
|
3
|
-
actual: any;
|
|
4
|
-
|
|
5
|
-
constructor(message: string, expected: any, actual: any, options?: ErrorOptions) {
|
|
6
|
-
super(message, options);
|
|
7
|
-
this.name = this.constructor.name;
|
|
8
|
-
this.expected = expected;
|
|
9
|
-
this.actual = actual;
|
|
10
|
-
Error.captureStackTrace(this, this.constructor);
|
|
11
|
-
}
|
|
12
|
-
}
|
package/src/index.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { Request, RequestOptions } from './request.js';
|
|
2
|
-
import { TestAgent, proxyAgent } from './agent.js';
|
|
3
|
-
import type { App, AgentOptions } from './types.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Test against the given `app`,
|
|
7
|
-
* returning a new `Test`.
|
|
8
|
-
*/
|
|
9
|
-
export function request(app: App, options: RequestOptions = {}) {
|
|
10
|
-
return new Request(app, options);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export {
|
|
14
|
-
Request, RequestOptions,
|
|
15
|
-
TestAgent,
|
|
16
|
-
// import { agent } from '@eggjs/supertest';
|
|
17
|
-
// agent()
|
|
18
|
-
proxyAgent as agent,
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
export * from './test.js';
|
|
22
|
-
|
|
23
|
-
// import request from '@eggjs/supertest';
|
|
24
|
-
// request()
|
|
25
|
-
export default new Proxy(request, {
|
|
26
|
-
apply(target, _, argumentsList) {
|
|
27
|
-
return target(argumentsList[0], argumentsList[1]);
|
|
28
|
-
},
|
|
29
|
-
get(target, property, receiver) {
|
|
30
|
-
// import request from '@eggjs/supertest';
|
|
31
|
-
// request.agent()
|
|
32
|
-
if (property === 'agent') {
|
|
33
|
-
return proxyAgent;
|
|
34
|
-
}
|
|
35
|
-
return Reflect.get(target, property, receiver);
|
|
36
|
-
},
|
|
37
|
-
}) as unknown as ((app: App, options?: RequestOptions) => Request) & {
|
|
38
|
-
agent: (app: App, options?: AgentOptions) => TestAgent;
|
|
39
|
-
};
|