msw-fetch-mock 0.3.0 → 0.3.1
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 +72 -6
- package/dist/browser.cjs +43 -0
- package/dist/browser.d.cts +15 -0
- package/dist/browser.d.ts +15 -9
- package/dist/browser.js +42 -7
- package/dist/chunk-43CWIVXO.cjs +540 -0
- package/dist/chunk-A56K5DPD.cjs +58 -0
- package/dist/chunk-ATXIIOZA.js +540 -0
- package/dist/chunk-D26SJTTI.js +27 -0
- package/dist/chunk-HYRDB2FH.cjs +27 -0
- package/dist/chunk-KSDUQENI.js +58 -0
- package/dist/fetch-mock-BNke4Oik.d.cts +199 -0
- package/dist/fetch-mock-BNke4Oik.d.ts +199 -0
- package/dist/index.cjs +19 -0
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -3
- package/dist/index.js +19 -1
- package/dist/legacy.cjs +71 -0
- package/dist/legacy.d.cts +38 -0
- package/dist/legacy.d.ts +38 -0
- package/dist/legacy.js +71 -0
- package/dist/node.cjs +19 -0
- package/dist/node.d.cts +18 -0
- package/dist/node.d.ts +17 -10
- package/dist/node.js +19 -12
- package/docs/api.md +121 -13
- package/docs/msw-v1-legacy.md +94 -0
- package/package.json +34 -10
- package/dist/browser-adapter.d.ts +0 -10
- package/dist/browser-adapter.d.ts.map +0 -1
- package/dist/browser-adapter.js +0 -20
- package/dist/browser.d.ts.map +0 -1
- package/dist/fetch-mock.d.ts +0 -31
- package/dist/fetch-mock.d.ts.map +0 -1
- package/dist/fetch-mock.js +0 -347
- package/dist/index.d.ts.map +0 -1
- package/dist/mock-call-history.d.ts +0 -65
- package/dist/mock-call-history.d.ts.map +0 -1
- package/dist/mock-call-history.js +0 -140
- package/dist/node-adapter.d.ts +0 -11
- package/dist/node-adapter.d.ts.map +0 -1
- package/dist/node-adapter.js +0 -34
- package/dist/node.d.ts.map +0 -1
- package/dist/types.d.ts +0 -74
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -1
package/README.md
CHANGED
|
@@ -10,6 +10,11 @@ If you're familiar with Cloudflare Workers' `fetchMock` (from `cloudflare:test`)
|
|
|
10
10
|
|
|
11
11
|
Supports both **Node.js** (`msw/node`) and **Browser** (`msw/browser`) environments via subpath exports.
|
|
12
12
|
|
|
13
|
+
## Requirements
|
|
14
|
+
|
|
15
|
+
- **Node.js** >= 18
|
|
16
|
+
- **MSW** ^1.0.0 (via `/legacy`) or ^2.12.7
|
|
17
|
+
|
|
13
18
|
## Install
|
|
14
19
|
|
|
15
20
|
```bash
|
|
@@ -89,6 +94,26 @@ afterEach(() => {
|
|
|
89
94
|
|
|
90
95
|
> **Note:** Only one MSW server can be active at a time. If another server is already listening, standalone `activate()` will throw an error guiding you to use `new FetchMock(new NodeMswAdapter(server))` instead.
|
|
91
96
|
|
|
97
|
+
### Legacy (MSW v1)
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
import { rest } from 'msw';
|
|
101
|
+
import { setupServer } from 'msw/node';
|
|
102
|
+
import { createFetchMock } from 'msw-fetch-mock/legacy';
|
|
103
|
+
|
|
104
|
+
const server = setupServer();
|
|
105
|
+
const fetchMock = createFetchMock(rest, server);
|
|
106
|
+
|
|
107
|
+
beforeAll(() => fetchMock.activate());
|
|
108
|
+
afterAll(() => fetchMock.deactivate());
|
|
109
|
+
afterEach(() => {
|
|
110
|
+
fetchMock.assertNoPendingInterceptors();
|
|
111
|
+
fetchMock.reset();
|
|
112
|
+
});
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
See [MSW v1 Legacy Guide](docs/msw-v1-legacy.md) for details.
|
|
116
|
+
|
|
92
117
|
## Unhandled Requests
|
|
93
118
|
|
|
94
119
|
By default `activate()` uses `'error'` mode — unmatched requests cause `fetch()` to reject. This includes requests to **consumed** interceptors (once a one-shot interceptor has been used, its handler is removed from MSW).
|
|
@@ -119,11 +144,12 @@ fetchMock.activate({
|
|
|
119
144
|
|
|
120
145
|
### Import Paths
|
|
121
146
|
|
|
122
|
-
| Path | Environment | MSW
|
|
123
|
-
| ------------------------ | ---------------------------- |
|
|
124
|
-
| `msw-fetch-mock` | Node.js (re-exports `/node`) |
|
|
125
|
-
| `msw-fetch-mock/node` | Node.js |
|
|
126
|
-
| `msw-fetch-mock/browser` | Browser |
|
|
147
|
+
| Path | Environment | MSW version |
|
|
148
|
+
| ------------------------ | ---------------------------- | ----------- |
|
|
149
|
+
| `msw-fetch-mock` | Node.js (re-exports `/node`) | v2 |
|
|
150
|
+
| `msw-fetch-mock/node` | Node.js | v2 |
|
|
151
|
+
| `msw-fetch-mock/browser` | Browser | v2 |
|
|
152
|
+
| `msw-fetch-mock/legacy` | Node.js (MSW v1) | v1 |
|
|
127
153
|
|
|
128
154
|
### `fetchMock` (singleton)
|
|
129
155
|
|
|
@@ -136,6 +162,7 @@ Factory function that creates a `FetchMock` with the appropriate adapter.
|
|
|
136
162
|
|
|
137
163
|
- Node: `createFetchMock(server?)` — optionally pass an existing MSW `SetupServer`
|
|
138
164
|
- Browser: `createFetchMock(worker)` — pass an MSW `SetupWorker` (required)
|
|
165
|
+
- Legacy: `createFetchMock(rest, server?)` — pass MSW v1 `rest` object
|
|
139
166
|
|
|
140
167
|
### `new FetchMock(adapter?)`
|
|
141
168
|
|
|
@@ -145,7 +172,7 @@ Creates a `FetchMock` instance with an explicit `MswAdapter`. Use `NodeMswAdapte
|
|
|
145
172
|
|
|
146
173
|
```typescript
|
|
147
174
|
fetchMock
|
|
148
|
-
.get(origin) //
|
|
175
|
+
.get(origin) // string, RegExp, or function
|
|
149
176
|
.intercept({ path, method, headers, body, query }) // match criteria
|
|
150
177
|
.reply(status, body, options) // define response
|
|
151
178
|
.times(n) / .persist(); // repeat control
|
|
@@ -167,10 +194,49 @@ fetchMock.assertNoPendingInterceptors(); // throws if unconsumed interceptors re
|
|
|
167
194
|
fetchMock.reset(); // clears interceptors + call history + handlers
|
|
168
195
|
```
|
|
169
196
|
|
|
197
|
+
## Tested Environments
|
|
198
|
+
|
|
199
|
+
E2E tests run on every CI push across these environments:
|
|
200
|
+
|
|
201
|
+
| Environment | Module System | Test Framework |
|
|
202
|
+
| -------------- | ------------- | ------------------- |
|
|
203
|
+
| Jest ESM | ESM (import) | Jest |
|
|
204
|
+
| Jest CJS | CJS (require) | Jest |
|
|
205
|
+
| Node.js Test | ESM (import) | Node test runner |
|
|
206
|
+
| Node.js CJS | CJS (require) | Node test runner |
|
|
207
|
+
| Vitest Browser | ESM (import) | Vitest + Playwright |
|
|
208
|
+
|
|
170
209
|
## Documentation
|
|
171
210
|
|
|
172
211
|
- [API Reference](docs/api.md) — full API details, matching options, reply callbacks
|
|
173
212
|
- [Cloudflare Workers Migration](docs/cloudflare-migration.md) — migrating from `cloudflare:test` fetchMock
|
|
213
|
+
- [MSW v1 Legacy Guide](docs/msw-v1-legacy.md) — using msw-fetch-mock with MSW v1
|
|
214
|
+
|
|
215
|
+
## Development
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
pnpm install
|
|
219
|
+
pnpm build # build with tsup
|
|
220
|
+
pnpm test # unit tests (vitest)
|
|
221
|
+
pnpm test:e2e # e2e tests (jest-esm, jest-cjs, node-test, node-cjs)
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### E2E Tests
|
|
225
|
+
|
|
226
|
+
E2E tests verify the published package works across different runtimes and module systems. The script builds, packs a tarball via `npm pack`, and installs it into each `e2e/` project — mirroring CI exactly.
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
# Run default suites (skip vitest-browser)
|
|
230
|
+
pnpm test:e2e
|
|
231
|
+
|
|
232
|
+
# Run a single suite
|
|
233
|
+
pnpm test:e2e -- node-cjs
|
|
234
|
+
|
|
235
|
+
# Run all suites including vitest-browser (auto-installs Playwright)
|
|
236
|
+
pnpm test:e2e -- --all
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Available suites: `jest-esm`, `jest-cjs`, `node-test`, `node-cjs`, `vitest-browser`
|
|
174
240
|
|
|
175
241
|
## License
|
|
176
242
|
|
package/dist/browser.cjs
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkHYRDB2FHcjs = require('./chunk-HYRDB2FH.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
var _chunk43CWIVXOcjs = require('./chunk-43CWIVXO.cjs');
|
|
9
|
+
|
|
10
|
+
// src/browser-adapter.ts
|
|
11
|
+
var BrowserMswAdapter = class {
|
|
12
|
+
|
|
13
|
+
constructor(worker) {
|
|
14
|
+
this.worker = worker;
|
|
15
|
+
}
|
|
16
|
+
use(...handlers) {
|
|
17
|
+
this.worker.use(...handlers);
|
|
18
|
+
}
|
|
19
|
+
resetHandlers(...handlers) {
|
|
20
|
+
this.worker.resetHandlers(...handlers);
|
|
21
|
+
}
|
|
22
|
+
async activate(options) {
|
|
23
|
+
await this.worker.start({
|
|
24
|
+
onUnhandledRequest: options.onUnhandledRequest
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
deactivate() {
|
|
28
|
+
this.worker.stop();
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// src/browser.ts
|
|
33
|
+
_chunk43CWIVXOcjs.FetchMock._handlerFactory = _chunkHYRDB2FHcjs.v2HandlerFactory;
|
|
34
|
+
function createFetchMock(worker) {
|
|
35
|
+
return new (0, _chunk43CWIVXOcjs.FetchMock)(new BrowserMswAdapter(worker));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
exports.BrowserMswAdapter = BrowserMswAdapter; exports.FetchMock = _chunk43CWIVXOcjs.FetchMock; exports.MockCallHistory = _chunk43CWIVXOcjs.MockCallHistory; exports.MockCallHistoryLog = _chunk43CWIVXOcjs.MockCallHistoryLog; exports.createFetchMock = createFetchMock;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { M as MswAdapter, S as SetupWorkerLike, R as ResolvedActivateOptions, F as FetchMock } from './fetch-mock-BNke4Oik.cjs';
|
|
2
|
+
export { A as ActivateOptions, C as CallHistoryFilterCriteria, H as HandlerFactory, I as InterceptOptions, a as MockCallHistory, b as MockCallHistoryLog, c as MockCallHistoryLogData, d as MockInterceptor, e as MockPool, f as MockReplyChain, O as OnUnhandledRequest, P as PendingInterceptor, g as ReplyOptions } from './fetch-mock-BNke4Oik.cjs';
|
|
3
|
+
|
|
4
|
+
declare class BrowserMswAdapter implements MswAdapter {
|
|
5
|
+
private readonly worker;
|
|
6
|
+
constructor(worker: SetupWorkerLike);
|
|
7
|
+
use(...handlers: Array<unknown>): void;
|
|
8
|
+
resetHandlers(...handlers: Array<unknown>): void;
|
|
9
|
+
activate(options: ResolvedActivateOptions): Promise<void>;
|
|
10
|
+
deactivate(): void;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
declare function createFetchMock(worker: SetupWorkerLike): FetchMock;
|
|
14
|
+
|
|
15
|
+
export { BrowserMswAdapter, FetchMock, MswAdapter, SetupWorkerLike, createFetchMock };
|
package/dist/browser.d.ts
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
|
-
import { FetchMock } from './fetch-mock';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { M as MswAdapter, S as SetupWorkerLike, R as ResolvedActivateOptions, F as FetchMock } from './fetch-mock-BNke4Oik.js';
|
|
2
|
+
export { A as ActivateOptions, C as CallHistoryFilterCriteria, H as HandlerFactory, I as InterceptOptions, a as MockCallHistory, b as MockCallHistoryLog, c as MockCallHistoryLogData, d as MockInterceptor, e as MockPool, f as MockReplyChain, O as OnUnhandledRequest, P as PendingInterceptor, g as ReplyOptions } from './fetch-mock-BNke4Oik.js';
|
|
3
|
+
|
|
4
|
+
declare class BrowserMswAdapter implements MswAdapter {
|
|
5
|
+
private readonly worker;
|
|
6
|
+
constructor(worker: SetupWorkerLike);
|
|
7
|
+
use(...handlers: Array<unknown>): void;
|
|
8
|
+
resetHandlers(...handlers: Array<unknown>): void;
|
|
9
|
+
activate(options: ResolvedActivateOptions): Promise<void>;
|
|
10
|
+
deactivate(): void;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
declare function createFetchMock(worker: SetupWorkerLike): FetchMock;
|
|
14
|
+
|
|
15
|
+
export { BrowserMswAdapter, FetchMock, MswAdapter, SetupWorkerLike, createFetchMock };
|
package/dist/browser.js
CHANGED
|
@@ -1,8 +1,43 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import {
|
|
2
|
+
v2HandlerFactory
|
|
3
|
+
} from "./chunk-D26SJTTI.js";
|
|
4
|
+
import {
|
|
5
|
+
FetchMock,
|
|
6
|
+
MockCallHistory,
|
|
7
|
+
MockCallHistoryLog
|
|
8
|
+
} from "./chunk-ATXIIOZA.js";
|
|
9
|
+
|
|
10
|
+
// src/browser-adapter.ts
|
|
11
|
+
var BrowserMswAdapter = class {
|
|
12
|
+
worker;
|
|
13
|
+
constructor(worker) {
|
|
14
|
+
this.worker = worker;
|
|
15
|
+
}
|
|
16
|
+
use(...handlers) {
|
|
17
|
+
this.worker.use(...handlers);
|
|
18
|
+
}
|
|
19
|
+
resetHandlers(...handlers) {
|
|
20
|
+
this.worker.resetHandlers(...handlers);
|
|
21
|
+
}
|
|
22
|
+
async activate(options) {
|
|
23
|
+
await this.worker.start({
|
|
24
|
+
onUnhandledRequest: options.onUnhandledRequest
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
deactivate() {
|
|
28
|
+
this.worker.stop();
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// src/browser.ts
|
|
33
|
+
FetchMock._handlerFactory = v2HandlerFactory;
|
|
34
|
+
function createFetchMock(worker) {
|
|
35
|
+
return new FetchMock(new BrowserMswAdapter(worker));
|
|
7
36
|
}
|
|
8
|
-
export {
|
|
37
|
+
export {
|
|
38
|
+
BrowserMswAdapter,
|
|
39
|
+
FetchMock,
|
|
40
|
+
MockCallHistory,
|
|
41
|
+
MockCallHistoryLog,
|
|
42
|
+
createFetchMock
|
|
43
|
+
};
|