mirror of
https://github.com/hanzoai/msw.git
synced 2026-09-24 17:00:34 +00:00
81 lines
2.1 KiB
TypeScript
81 lines
2.1 KiB
TypeScript
// @vitest-environment node
|
|
import { http, bypass } from 'msw'
|
|
import { setupServer } from 'msw/node'
|
|
import express from 'express'
|
|
import { HttpServer } from '@open-draft/test-server/http'
|
|
|
|
const httpServer = new HttpServer((app) => {
|
|
app.use('/resource', (_req, res, next) => {
|
|
res.setHeader('access-control-allow-headers', '*')
|
|
next()
|
|
})
|
|
app.post('/resource', express.text(), (req, res) => {
|
|
res.json({
|
|
text: req.body,
|
|
requestHeaders: req.headers,
|
|
})
|
|
})
|
|
})
|
|
|
|
const server = setupServer()
|
|
|
|
beforeAll(async () => {
|
|
server.listen()
|
|
await httpServer.listen()
|
|
})
|
|
|
|
afterEach(() => {
|
|
server.resetHandlers()
|
|
})
|
|
|
|
afterAll(async () => {
|
|
server.close()
|
|
await httpServer.close()
|
|
})
|
|
|
|
it('supports patching an original HTTP response', async () => {
|
|
server.use(
|
|
http.post(httpServer.http.url('/resource'), async ({ request }) => {
|
|
const originalResponse = await fetch(bypass(request))
|
|
const { text, requestHeaders } = await originalResponse.json()
|
|
return new Response(text.toUpperCase(), { headers: requestHeaders })
|
|
}),
|
|
)
|
|
|
|
const response = await fetch(httpServer.http.url('/resource'), {
|
|
method: 'POST',
|
|
body: 'world',
|
|
})
|
|
|
|
await expect(response.text()).resolves.toBe('WORLD')
|
|
|
|
// Must not contain the internal bypass request header.
|
|
expect(Object.fromEntries(response.headers)).toHaveProperty('accept', '*/*')
|
|
})
|
|
|
|
it('preserves request "accept" header when patching a response', async () => {
|
|
server.use(
|
|
http.post(httpServer.http.url('/resource'), async ({ request }) => {
|
|
const originalResponse = await fetch(bypass(request))
|
|
const { text, requestHeaders } = await originalResponse.json()
|
|
return new Response(text.toUpperCase(), { headers: requestHeaders })
|
|
}),
|
|
)
|
|
|
|
const response = await fetch(httpServer.http.url('/resource'), {
|
|
method: 'POST',
|
|
headers: {
|
|
accept: 'application/json',
|
|
},
|
|
body: 'world',
|
|
})
|
|
|
|
await expect(response.text()).resolves.toBe('WORLD')
|
|
|
|
// Must not contain the internal bypass request header.
|
|
expect(Object.fromEntries(response.headers)).toHaveProperty(
|
|
'accept',
|
|
'application/json',
|
|
)
|
|
})
|