fix(tests): fix globalThis.fetch pollution between test files
- install.test.ts: save and restore globalThis.fetch in beforeEach/afterEach to prevent leaking a mock fetch (without .preconnect) into subsequent test files - provider.test.ts: guard against originalFetch missing .preconnect when captured from a leaked mock (defensive null-safe binding) - discovery.test.ts: add writable:true to all Object.defineProperty fetch assignments so downstream plain assignments (globalThis.fetch = ...) are not silently ignored Root cause: install.test.ts set globalThis.fetch = mock(...) inside test bodies without restoring it, leaving a mock fetch (no .preconnect method) that caused provider.test.ts refresh tests to throw TypeError at the fetchMock construction
This commit is contained in:
@@ -9,7 +9,7 @@ describe("discoverOAuthServerMetadata", () => {
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
Object.defineProperty(globalThis, "fetch", { value: originalFetch, configurable: true })
|
||||
Object.defineProperty(globalThis, "fetch", { value: originalFetch, configurable: true, writable: true })
|
||||
})
|
||||
|
||||
test("returns endpoints from PRM + AS discovery", () => {
|
||||
@@ -37,7 +37,7 @@ describe("discoverOAuthServerMetadata", () => {
|
||||
}
|
||||
return new Response("not found", { status: 404 })
|
||||
}
|
||||
Object.defineProperty(globalThis, "fetch", { value: fetchMock, configurable: true })
|
||||
Object.defineProperty(globalThis, "fetch", { value: fetchMock, configurable: true, writable: true })
|
||||
|
||||
// when
|
||||
return discoverOAuthServerMetadata(resource).then((result) => {
|
||||
@@ -75,7 +75,7 @@ describe("discoverOAuthServerMetadata", () => {
|
||||
}
|
||||
return new Response("not found", { status: 404 })
|
||||
}
|
||||
Object.defineProperty(globalThis, "fetch", { value: fetchMock, configurable: true })
|
||||
Object.defineProperty(globalThis, "fetch", { value: fetchMock, configurable: true, writable: true })
|
||||
|
||||
// when
|
||||
return discoverOAuthServerMetadata(resource).then((result) => {
|
||||
@@ -118,7 +118,7 @@ describe("discoverOAuthServerMetadata", () => {
|
||||
}
|
||||
return new Response("not found", { status: 404 })
|
||||
}
|
||||
Object.defineProperty(globalThis, "fetch", { value: fetchMock, configurable: true })
|
||||
Object.defineProperty(globalThis, "fetch", { value: fetchMock, configurable: true, writable: true })
|
||||
|
||||
// when
|
||||
return discoverOAuthServerMetadata(resource).then((result) => {
|
||||
@@ -144,7 +144,7 @@ describe("discoverOAuthServerMetadata", () => {
|
||||
}
|
||||
return new Response("not found", { status: 404 })
|
||||
}
|
||||
Object.defineProperty(globalThis, "fetch", { value: fetchMock, configurable: true })
|
||||
Object.defineProperty(globalThis, "fetch", { value: fetchMock, configurable: true, writable: true })
|
||||
|
||||
// when
|
||||
const result = discoverOAuthServerMetadata(resource)
|
||||
@@ -165,7 +165,7 @@ describe("discoverOAuthServerMetadata", () => {
|
||||
}
|
||||
return new Response("not found", { status: 404 })
|
||||
}
|
||||
Object.defineProperty(globalThis, "fetch", { value: fetchMock, configurable: true })
|
||||
Object.defineProperty(globalThis, "fetch", { value: fetchMock, configurable: true, writable: true })
|
||||
|
||||
// when
|
||||
const result = discoverOAuthServerMetadata(resource)
|
||||
@@ -192,7 +192,7 @@ describe("discoverOAuthServerMetadata", () => {
|
||||
}
|
||||
return new Response("not found", { status: 404 })
|
||||
}
|
||||
Object.defineProperty(globalThis, "fetch", { value: fetchMock, configurable: true })
|
||||
Object.defineProperty(globalThis, "fetch", { value: fetchMock, configurable: true, writable: true })
|
||||
|
||||
// when
|
||||
const result = discoverOAuthServerMetadata(resource)
|
||||
@@ -225,7 +225,7 @@ describe("discoverOAuthServerMetadata", () => {
|
||||
}
|
||||
return new Response("not found", { status: 404 })
|
||||
}
|
||||
Object.defineProperty(globalThis, "fetch", { value: fetchMock, configurable: true })
|
||||
Object.defineProperty(globalThis, "fetch", { value: fetchMock, configurable: true, writable: true })
|
||||
|
||||
// when
|
||||
return discoverOAuthServerMetadata(resource)
|
||||
|
||||
@@ -287,7 +287,7 @@ describe("McpOAuthProvider", () => {
|
||||
})
|
||||
const fetchMock = Object.assign(
|
||||
async (...args: Parameters<typeof fetch>): ReturnType<typeof fetch> => fetchStub(...args),
|
||||
{ preconnect: originalFetch.preconnect.bind(originalFetch) },
|
||||
{ preconnect: originalFetch?.preconnect?.bind(originalFetch) ?? (() => {}) },
|
||||
) satisfies typeof fetch
|
||||
globalThis.fetch = fetchMock
|
||||
|
||||
|
||||
Reference in New Issue
Block a user