backend-test-tools 1.2.2 → 1.2.4
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/.github/workflows/release.yml +2 -2
- package/CHANGELOG.md +17 -0
- package/CLAUDE.md +40 -0
- package/dist/src/utils/mockRequest.d.ts +1 -1
- package/dist/stubs/server-engine/sendPush.js +2 -1
- package/dist/stubs/server-engine/sendPush.js.map +1 -1
- package/dist/utils/mockRequest.js +3 -2
- package/dist/utils/mockRequest.js.map +1 -1
- package/package.json +26 -19
- package/src/utils/mockRequest.ts +17 -16
|
@@ -18,13 +18,13 @@ jobs:
|
|
|
18
18
|
|
|
19
19
|
steps:
|
|
20
20
|
- name: Checkout
|
|
21
|
-
uses: actions/checkout@
|
|
21
|
+
uses: actions/checkout@v5
|
|
22
22
|
with:
|
|
23
23
|
fetch-depth: 0
|
|
24
24
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
25
25
|
|
|
26
26
|
- name: Setup Node.js
|
|
27
|
-
uses: actions/setup-node@
|
|
27
|
+
uses: actions/setup-node@v5
|
|
28
28
|
with:
|
|
29
29
|
node-version: '22'
|
|
30
30
|
registry-url: 'https://registry.npmjs.org'
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
## [1.2.4](https://github.com/prakashmahendran/backend-test-tools/compare/v1.2.3...v1.2.4) (2026-11-12)
|
|
2
|
+
|
|
3
|
+
### 🐛 Bug Fixes
|
|
4
|
+
|
|
5
|
+
* **ci:** use changelog preset compatible with semantic-release ([ac916dd](https://github.com/prakashmahendran/backend-test-tools/commit/ac916ddc071ab83e90c619f7b842b27ca7e5f45d))
|
|
6
|
+
* **deps:** patch vulnerable dependencies and make engine peer optional ([91f4d5b](https://github.com/prakashmahendran/backend-test-tools/commit/91f4d5bfad66dc343e0e2b200e05e895d6b83c85))
|
|
7
|
+
|
|
8
|
+
### 📚 Documentation
|
|
9
|
+
|
|
10
|
+
* add CLAUDE.md with package overview and conventions ([e75a233](https://github.com/prakashmahendran/backend-test-tools/commit/e75a233c5cac6aa6d8290c85fe04f0f5f9d60fa8))
|
|
11
|
+
|
|
12
|
+
## [1.2.3](https://github.com/prakashmahendran/backend-test-tools/compare/v1.2.2...v1.2.3) (2025-12-10)
|
|
13
|
+
|
|
14
|
+
### 🐛 Bug Fixes
|
|
15
|
+
|
|
16
|
+
* es-lint ([d5b4d93](https://github.com/prakashmahendran/backend-test-tools/commit/d5b4d9357139d55672d0a16b636e6b07cd8703b2))
|
|
17
|
+
|
|
1
18
|
## [1.2.2](https://github.com/prakashmahendran/backend-test-tools/compare/v1.2.1...v1.2.2) (2025-12-10)
|
|
2
19
|
|
|
3
20
|
### 🐛 Bug Fixes
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# backend-test-tools
|
|
2
|
+
|
|
3
|
+
Test helpers (published to npm) for backend services generated from `node-server-template`. Services
|
|
4
|
+
install it as a **devDependency**.
|
|
5
|
+
|
|
6
|
+
- `node-server-engine` is an *optional* peer dependency: the stubs in `src/stubs/server-engine` wrap engine
|
|
7
|
+
classes, so consuming services already have it installed.
|
|
8
|
+
- `node-server-engine` must not depend on this package. The engine keeps its own test helpers to avoid a
|
|
9
|
+
circular dependency.
|
|
10
|
+
|
|
11
|
+
## Commands
|
|
12
|
+
|
|
13
|
+
Node.js >= 22.
|
|
14
|
+
|
|
15
|
+
| Task | Command |
|
|
16
|
+
| --- | --- |
|
|
17
|
+
| Install | `npm ci` |
|
|
18
|
+
| Build to `dist/` (tsc for types + babel for JS) | `npm run build` |
|
|
19
|
+
| Lint | `npm run lint` |
|
|
20
|
+
| Tests | `npm test` (there are currently no test files; verify changes with `npm run build`) |
|
|
21
|
+
|
|
22
|
+
## Layout (`src/`)
|
|
23
|
+
|
|
24
|
+
- `generators/`: `generateAccessToken` (HS256 JWT signed with `JWT_SECRET`, matching the engine's test
|
|
25
|
+
mode), `generateEcdsaKeyPair`, `generateRsaKeyPair`, `generateUserCrypto`, `generateImageBuffer`
|
|
26
|
+
(uses `sharp`), `generateLocale`.
|
|
27
|
+
- `utils/`: `getBearer`, `jwtRequest`/`staticRequest`/`tlsRequest` (supertest wrappers), `mockRequest`
|
|
28
|
+
(Express request/response/next mocks), `generateCerts` (`generatePkiEnvironment`, which uses `node-forge`
|
|
29
|
+
to write a CA plus client/server certificates to `./certs`).
|
|
30
|
+
- `factory/`: `factory.build('user')` / `buildMany` for plain test objects.
|
|
31
|
+
- `stubs/server-engine/`: sinon stubs for engine features (`PubSub`, `PushNotification`, `sendPush`,
|
|
32
|
+
`Localizator`).
|
|
33
|
+
- `index.ts`: public exports.
|
|
34
|
+
|
|
35
|
+
## Conventions
|
|
36
|
+
|
|
37
|
+
- Runtime `dependencies` are what consumers need at test time (`jsonwebtoken`, `node-forge`, `sharp`,
|
|
38
|
+
`sinon`, `supertest`). Build-only tooling goes in `devDependencies`.
|
|
39
|
+
- Never commit generated keys or certificates. `certs/` is created at test time.
|
|
40
|
+
- Conventional commits. Pushing to `main` triggers semantic-release, which publishes to npm.
|
|
@@ -6,7 +6,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.stubSendPush = stubSendPush;
|
|
7
7
|
var sendPush = _interopRequireWildcard(require("node-server-engine/dist/utils/sendPush/sendPush"));
|
|
8
8
|
var _sinon = require("sinon");
|
|
9
|
-
|
|
9
|
+
var cache;
|
|
10
|
+
function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var r, c, a = Object.defineProperty, n = { __proto__: null, default: e }; if (Object(e) !== e) return n; if (cache || "function" != typeof WeakMap || (cache = new WeakMap()), cache) { if (cache.has(e)) return cache.get(e); cache.set(e, n); } for (c in e) "default" !== c && {}.hasOwnProperty.call(e, c) && ((r = a && Object.getOwnPropertyDescriptor(e, c)) && (r.get || r.set) ? a(n, c, r) : n[c] = e[c]); return n; }
|
|
10
11
|
/** Stub the sendPush function */
|
|
11
12
|
function stubSendPush() {
|
|
12
13
|
return (0, _sinon.stub)(sendPush, 'sendPush').resolves();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendPush.js","names":["sendPush","_interopRequireWildcard","require","_sinon","e","t","
|
|
1
|
+
{"version":3,"file":"sendPush.js","names":["sendPush","_interopRequireWildcard","require","_sinon","cache","e","t","__esModule","r","c","a","Object","defineProperty","n","__proto__","default","WeakMap","has","get","set","hasOwnProperty","call","getOwnPropertyDescriptor","stubSendPush","stub","resolves"],"sources":["../../../src/stubs/server-engine/sendPush.ts"],"sourcesContent":["import * as sendPush from 'node-server-engine/dist/utils/sendPush/sendPush';\nimport {SinonStub, stub} from 'sinon';\n\n/** Stub the sendPush function */\nexport function stubSendPush(): SinonStub {\n return stub(sendPush, 'sendPush').resolves();\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAAsC,IAAAE,KAAA;AAAA,SAAAH,wBAAAI,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAE,UAAA,SAAAF,CAAA,MAAAG,CAAA,EAAAC,CAAA,EAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,QAAAM,MAAA,CAAAN,CAAA,MAAAA,CAAA,SAAAQ,CAAA,MAAAT,KAAA,yBAAAY,OAAA,KAAAZ,KAAA,OAAAY,OAAA,KAAAZ,KAAA,QAAAA,KAAA,CAAAa,GAAA,CAAAZ,CAAA,UAAAD,KAAA,CAAAc,GAAA,CAAAb,CAAA,GAAAD,KAAA,CAAAe,GAAA,CAAAd,CAAA,EAAAQ,CAAA,UAAAJ,CAAA,IAAAJ,CAAA,gBAAAI,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAI,CAAA,OAAAD,CAAA,GAAAE,CAAA,IAAAC,MAAA,CAAAW,wBAAA,CAAAjB,CAAA,EAAAI,CAAA,OAAAD,CAAA,CAAAU,GAAA,IAAAV,CAAA,CAAAW,GAAA,IAAAT,CAAA,CAAAG,CAAA,EAAAJ,CAAA,EAAAD,CAAA,IAAAK,CAAA,CAAAJ,CAAA,IAAAJ,CAAA,CAAAI,CAAA,WAAAI,CAAA;AAEtC;AACO,SAASU,YAAYA,CAAA,EAAc;EACxC,OAAO,IAAAC,WAAI,EAACxB,QAAQ,EAAE,UAAU,CAAC,CAACyB,QAAQ,CAAC,CAAC;AAC9C","ignoreList":[]}
|
|
@@ -18,8 +18,9 @@ function createMockRequest(overrides = {}) {
|
|
|
18
18
|
method: 'GET',
|
|
19
19
|
url: '/',
|
|
20
20
|
path: '/',
|
|
21
|
-
get:
|
|
22
|
-
|
|
21
|
+
get: name => {
|
|
22
|
+
const header = req.headers?.[name.toLowerCase()];
|
|
23
|
+
return header;
|
|
23
24
|
},
|
|
24
25
|
...overrides
|
|
25
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockRequest.js","names":["createMockRequest","overrides","req","body","query","params","headers","method","url","path","get","name","toLowerCase","createMockResponse","res","status","code","statusCode","json","data","send","setHeader","value","end","createMockNext","next","error","called"],"sources":["../../src/utils/mockRequest.ts"],"sourcesContent":["import { Request, Response, NextFunction } from 'express';\n\ninterface MockResponse extends Response {\n body?:
|
|
1
|
+
{"version":3,"file":"mockRequest.js","names":["createMockRequest","overrides","req","body","query","params","headers","method","url","path","get","name","header","toLowerCase","createMockResponse","res","status","code","statusCode","json","data","send","setHeader","value","end","createMockNext","next","error","called"],"sources":["../../src/utils/mockRequest.ts"],"sourcesContent":["import { Request, Response, NextFunction } from 'express';\n\ninterface MockResponse extends Response {\n body?: unknown;\n headers?: Record<string, string>;\n}\n\n/**\n * Creates a mock Express Request object for testing\n */\nexport function createMockRequest(overrides: Partial<Request> = {}): Request {\n const req: Partial<Request> = {\n body: {},\n query: {},\n params: {},\n headers: {},\n method: 'GET',\n url: '/',\n path: '/',\n get: ((name: string) => {\n const header = (req.headers as Record<string, string | string[]>)?.[name.toLowerCase()];\n return header;\n }) as Request['get'],\n ...overrides\n };\n\n return req as Request;\n}\n\n/**\n * Creates a mock Express Response object for testing\n */\nexport function createMockResponse(): MockResponse {\n const res: Partial<MockResponse> = {};\n res.status = function (code: number) {\n (res as MockResponse).statusCode = code;\n return res as MockResponse;\n };\n res.json = function (data: unknown) {\n (res as MockResponse).body = data;\n return res as MockResponse;\n };\n res.send = function (data: unknown) {\n (res as MockResponse).body = data;\n return res as MockResponse;\n };\n res.setHeader = function (name: string, value: string) {\n if (!(res as MockResponse).headers) (res as MockResponse).headers = {};\n (res as MockResponse).headers![name] = value;\n return res as MockResponse;\n };\n res.end = function () {\n return res as MockResponse;\n };\n return res as MockResponse;\n}\n\n/**\n * Creates a mock Express NextFunction for testing\n */\nexport function createMockNext(): NextFunction {\n const next = function (error?: unknown) {\n next.called = true;\n next.error = error;\n } as NextFunction & { called?: boolean; error?: unknown };\n next.called = false;\n return next;\n}\n"],"mappings":";;;;;;;;AAOA;AACA;AACA;AACO,SAASA,iBAAiBA,CAACC,SAA2B,GAAG,CAAC,CAAC,EAAW;EAC3E,MAAMC,GAAqB,GAAG;IAC5BC,IAAI,EAAE,CAAC,CAAC;IACRC,KAAK,EAAE,CAAC,CAAC;IACTC,MAAM,EAAE,CAAC,CAAC;IACVC,OAAO,EAAE,CAAC,CAAC;IACXC,MAAM,EAAE,KAAK;IACbC,GAAG,EAAE,GAAG;IACRC,IAAI,EAAE,GAAG;IACTC,GAAG,EAAIC,IAAY,IAAK;MACtB,MAAMC,MAAM,GAAIV,GAAG,CAACI,OAAO,GAAyCK,IAAI,CAACE,WAAW,CAAC,CAAC,CAAC;MACvF,OAAOD,MAAM;IACf,CAAoB;IACpB,GAAGX;EACL,CAAC;EAED,OAAOC,GAAG;AACZ;;AAEA;AACA;AACA;AACO,SAASY,kBAAkBA,CAAA,EAAiB;EACjD,MAAMC,GAA0B,GAAG,CAAC,CAAC;EACrCA,GAAG,CAACC,MAAM,GAAG,UAAUC,IAAY,EAAE;IAClCF,GAAG,CAAkBG,UAAU,GAAGD,IAAI;IACvC,OAAOF,GAAG;EACZ,CAAC;EACDA,GAAG,CAACI,IAAI,GAAG,UAAUC,IAAa,EAAE;IACjCL,GAAG,CAAkBZ,IAAI,GAAGiB,IAAI;IACjC,OAAOL,GAAG;EACZ,CAAC;EACDA,GAAG,CAACM,IAAI,GAAG,UAAUD,IAAa,EAAE;IACjCL,GAAG,CAAkBZ,IAAI,GAAGiB,IAAI;IACjC,OAAOL,GAAG;EACZ,CAAC;EACDA,GAAG,CAACO,SAAS,GAAG,UAAUX,IAAY,EAAEY,KAAa,EAAE;IACrD,IAAI,CAAER,GAAG,CAAkBT,OAAO,EAAGS,GAAG,CAAkBT,OAAO,GAAG,CAAC,CAAC;IACrES,GAAG,CAAkBT,OAAO,CAAEK,IAAI,CAAC,GAAGY,KAAK;IAC5C,OAAOR,GAAG;EACZ,CAAC;EACDA,GAAG,CAACS,GAAG,GAAG,YAAY;IACpB,OAAOT,GAAG;EACZ,CAAC;EACD,OAAOA,GAAG;AACZ;;AAEA;AACA;AACA;AACO,SAASU,cAAcA,CAAA,EAAiB;EAC7C,MAAMC,IAAI,GAAG,SAAAA,CAAUC,KAAe,EAAE;IACtCD,IAAI,CAACE,MAAM,GAAG,IAAI;IAClBF,IAAI,CAACC,KAAK,GAAGA,KAAK;EACpB,CAAyD;EACzDD,IAAI,CAACE,MAAM,GAAG,KAAK;EACnB,OAAOF,IAAI;AACb","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "backend-test-tools",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4",
|
|
4
4
|
"description": "Backend Node test tools",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/src/index.d.ts",
|
|
@@ -29,33 +29,35 @@
|
|
|
29
29
|
"@babel/preset-env": "^7.26.0",
|
|
30
30
|
"@babel/preset-typescript": "^7.26.0",
|
|
31
31
|
"@babel/register": "^7.25.9",
|
|
32
|
-
"@commitlint/cli": "^
|
|
33
|
-
"@commitlint/config-conventional": "^
|
|
32
|
+
"@commitlint/cli": "^21.2.4",
|
|
33
|
+
"@commitlint/config-conventional": "^21.2.4",
|
|
34
34
|
"@eslint/js": "^9.17.0",
|
|
35
|
-
"@faker-js/faker": "^
|
|
36
|
-
"@semantic-release/changelog": "^
|
|
37
|
-
"@semantic-release/git": "^
|
|
35
|
+
"@faker-js/faker": "^10.6.0",
|
|
36
|
+
"@semantic-release/changelog": "^7.0.0",
|
|
37
|
+
"@semantic-release/git": "^11.0.1",
|
|
38
38
|
"@types/chai": "^5.0.1",
|
|
39
|
+
"@types/express": "^5.0.6",
|
|
39
40
|
"@types/jsonwebtoken": "^9.0.7",
|
|
40
41
|
"@types/mocha": "^10.0.10",
|
|
41
42
|
"@types/node": "^22.10.2",
|
|
42
43
|
"@types/node-forge": "^1.3.11",
|
|
43
|
-
"@types/sinon": "^
|
|
44
|
+
"@types/sinon": "^22.0.2",
|
|
44
45
|
"@types/superagent": "^8.1.9",
|
|
45
|
-
"@types/supertest": "^
|
|
46
|
+
"@types/supertest": "^7.2.1",
|
|
46
47
|
"@types/validator": "^13.12.2",
|
|
47
48
|
"@typescript-eslint/eslint-plugin": "^8.18.1",
|
|
48
49
|
"babel-plugin-istanbul": "^7.0.0",
|
|
49
50
|
"babel-plugin-module-resolver": "^5.0.2",
|
|
50
51
|
"babel-plugin-tsconfig-paths": "^1.0.3",
|
|
51
|
-
"conventional-changelog-conventionalcommits": "^
|
|
52
|
+
"conventional-changelog-conventionalcommits": "^9.3.1",
|
|
52
53
|
"core-js": "^3.39.0",
|
|
53
54
|
"eslint": "^9.17.0",
|
|
54
|
-
"globals": "^
|
|
55
|
+
"globals": "^17.14.0",
|
|
55
56
|
"husky": "^9.1.7",
|
|
56
|
-
"lint-staged": "^
|
|
57
|
-
"mocha": "^
|
|
58
|
-
"
|
|
57
|
+
"lint-staged": "^17.6.0",
|
|
58
|
+
"mocha": "^12.0.3",
|
|
59
|
+
"node-server-engine": "^1.14.0",
|
|
60
|
+
"nyc": "^18.0.0",
|
|
59
61
|
"prettier": "^3.4.2",
|
|
60
62
|
"rimraf": "^6.0.1",
|
|
61
63
|
"semantic-release": "^25.0.2",
|
|
@@ -78,11 +80,16 @@
|
|
|
78
80
|
"node-server-engine": "^1.2.6"
|
|
79
81
|
},
|
|
80
82
|
"dependencies": {
|
|
81
|
-
"@babel/runtime": "^7.
|
|
82
|
-
"jsonwebtoken": "^9.0.
|
|
83
|
-
"node-forge": "^1.3
|
|
84
|
-
"sharp": "^0.
|
|
85
|
-
"sinon": "^
|
|
86
|
-
"supertest": "^7.
|
|
83
|
+
"@babel/runtime": "^7.29.14",
|
|
84
|
+
"jsonwebtoken": "^9.0.3",
|
|
85
|
+
"node-forge": "^1.4.3",
|
|
86
|
+
"sharp": "^0.35.5",
|
|
87
|
+
"sinon": "^22.1.0",
|
|
88
|
+
"supertest": "^7.3.2"
|
|
89
|
+
},
|
|
90
|
+
"peerDependenciesMeta": {
|
|
91
|
+
"node-server-engine": {
|
|
92
|
+
"optional": true
|
|
93
|
+
}
|
|
87
94
|
}
|
|
88
95
|
}
|
package/src/utils/mockRequest.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Request, Response, NextFunction } from 'express';
|
|
2
2
|
|
|
3
3
|
interface MockResponse extends Response {
|
|
4
|
-
body?:
|
|
4
|
+
body?: unknown;
|
|
5
5
|
headers?: Record<string, string>;
|
|
6
6
|
}
|
|
7
7
|
|
|
@@ -9,7 +9,7 @@ interface MockResponse extends Response {
|
|
|
9
9
|
* Creates a mock Express Request object for testing
|
|
10
10
|
*/
|
|
11
11
|
export function createMockRequest(overrides: Partial<Request> = {}): Request {
|
|
12
|
-
const req:
|
|
12
|
+
const req: Partial<Request> = {
|
|
13
13
|
body: {},
|
|
14
14
|
query: {},
|
|
15
15
|
params: {},
|
|
@@ -17,9 +17,10 @@ export function createMockRequest(overrides: Partial<Request> = {}): Request {
|
|
|
17
17
|
method: 'GET',
|
|
18
18
|
url: '/',
|
|
19
19
|
path: '/',
|
|
20
|
-
get:
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
get: ((name: string) => {
|
|
21
|
+
const header = (req.headers as Record<string, string | string[]>)?.[name.toLowerCase()];
|
|
22
|
+
return header;
|
|
23
|
+
}) as Request['get'],
|
|
23
24
|
...overrides
|
|
24
25
|
};
|
|
25
26
|
|
|
@@ -30,26 +31,26 @@ export function createMockRequest(overrides: Partial<Request> = {}): Request {
|
|
|
30
31
|
* Creates a mock Express Response object for testing
|
|
31
32
|
*/
|
|
32
33
|
export function createMockResponse(): MockResponse {
|
|
33
|
-
const res:
|
|
34
|
+
const res: Partial<MockResponse> = {};
|
|
34
35
|
res.status = function (code: number) {
|
|
35
|
-
res.statusCode = code;
|
|
36
|
-
return res;
|
|
36
|
+
(res as MockResponse).statusCode = code;
|
|
37
|
+
return res as MockResponse;
|
|
37
38
|
};
|
|
38
39
|
res.json = function (data: unknown) {
|
|
39
|
-
res.body = data;
|
|
40
|
-
return res;
|
|
40
|
+
(res as MockResponse).body = data;
|
|
41
|
+
return res as MockResponse;
|
|
41
42
|
};
|
|
42
43
|
res.send = function (data: unknown) {
|
|
43
|
-
res.body = data;
|
|
44
|
-
return res;
|
|
44
|
+
(res as MockResponse).body = data;
|
|
45
|
+
return res as MockResponse;
|
|
45
46
|
};
|
|
46
47
|
res.setHeader = function (name: string, value: string) {
|
|
47
|
-
if (!res.headers) res.headers = {};
|
|
48
|
-
res.headers[name] = value;
|
|
49
|
-
return res;
|
|
48
|
+
if (!(res as MockResponse).headers) (res as MockResponse).headers = {};
|
|
49
|
+
(res as MockResponse).headers![name] = value;
|
|
50
|
+
return res as MockResponse;
|
|
50
51
|
};
|
|
51
52
|
res.end = function () {
|
|
52
|
-
return res;
|
|
53
|
+
return res as MockResponse;
|
|
53
54
|
};
|
|
54
55
|
return res as MockResponse;
|
|
55
56
|
}
|