Skip to content

Commit d3e1e4b

Browse files
authored
fix: Make Mentoss work in Bun (#36)
* fix: Make Mentoss work in Bun * Fix delay test
1 parent c05baa2 commit d3e1e4b

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

src/fetch-mocker.js

+17-1
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,23 @@ export class FetchMocker {
190190
const request = new this.#Request(fixedInput, init);
191191
let useCors = false;
192192
let preflightData;
193-
193+
194+
/*
195+
* Bun's fetch implementation sets credentials to "include" by default
196+
* and doesn't allow overwriting that value when creating a Request.
197+
* We therefore need to hack it together to make sure this works in
198+
* Bun correctly.
199+
* https://github.com/oven-sh/bun/issues/17052
200+
*/
201+
if ("Bun" in globalThis) {
202+
Object.defineProperty(request, "credentials", {
203+
configurable: true,
204+
enumerable: true,
205+
value: init?.credentials ?? "same-origin",
206+
writable: false,
207+
});
208+
}
209+
194210
if (request.credentials === "include") {
195211
throw new Error("Credentialed requests are not yet supported.");
196212
}

tests/fetch-mocker.test.js

+1-4
Original file line numberDiff line numberDiff line change
@@ -532,10 +532,7 @@ describe("FetchMocker", () => {
532532
const server = new MockServer(BASE_URL);
533533
const fetchMocker = new FetchMocker({ servers: [server] });
534534

535-
await assert.rejects(fetchMocker.fetch("/hello"), {
536-
name: "TypeError",
537-
message: "Failed to parse URL from /hello",
538-
});
535+
await assert.rejects(fetchMocker.fetch("/hello"), /Failed [\w\W]+\/hello/iu);
539536
});
540537

541538
it("should return 200 when using a relative URL and a baseUrl", async () => {

tests/mock-server.test.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ function createRequest({ method, url, headers = {}, body = undefined }) {
4444
requestInit.body = JSON.stringify(body);
4545
requestInit.headers["content-type"] = "application/json";
4646
} else {
47+
requestInit.headers["content-type"] = "text/plain;charset=UTF-8";
4748
requestInit.body = body;
4849
}
4950
}
@@ -260,8 +261,9 @@ describe("MockServer", () => {
260261
const response = await server.receive(request);
261262
const elapsed = Date.now() - startTime;
262263

264+
// Note: Bun's clock runs fast so could be a bit under 500ms
263265
assert.ok(
264-
elapsed >= 500,
266+
elapsed >= 475,
265267
`Response was delayed ${elapsed}ms, expected at least 500ms.`,
266268
);
267269
assert.strictEqual(response.url, `${BASE_URL}/test?foo=bar`);

0 commit comments

Comments
 (0)