Files
msw/test/node/third-party/axios-upload.node.test.ts
2025-11-05 13:45:06 +01:00

67 lines
1.6 KiB
TypeScript

// @vitest-environment node
import { File } from 'node:buffer'
import axios from 'axios'
import { http, HttpResponse } from 'msw'
import { setupServer } from 'msw/node'
const server = setupServer(
http.post('https://example.com/upload', async ({ request }) => {
const data = await request.formData()
const file = data.get('file')
if (!file) {
return new HttpResponse('Missing document upload', { status: 400 })
}
if (!(file instanceof File)) {
return new HttpResponse('Uploaded document is not a File', {
status: 400,
})
}
return HttpResponse.json({
message: `Successfully uploaded "${file.name}"!`,
content: await file.text(),
})
}),
)
beforeAll(() => {
server.listen()
})
afterAll(() => {
server.close()
})
it('responds with a mocked response to an upload request', async () => {
const onUploadProgress = vi.fn()
const request = axios.create({
baseURL: 'https://example.com',
onUploadProgress,
})
const formData = new FormData()
const file = new Blob(['Hello', 'world'], { type: 'text/plain' })
formData.set('file', file, 'doc.txt')
const response = await request.post('/upload', formData).catch((error) => {
throw error.response.data
})
expect(response.data).toEqual({
message: 'Successfully uploaded "doc.txt"!',
content: 'Helloworld',
})
expect(onUploadProgress.mock.calls.length).toBeGreaterThan(0)
expect(onUploadProgress).toHaveBeenNthCalledWith(
1,
expect.objectContaining({
loaded: expect.any(Number),
total: expect.any(Number),
bytes: expect.any(Number),
}),
)
})