Develop and test Cloudflare applications with Mock Service Worker.
npm i pkg.pr.new/mswjs/cloudflare/@msw/cloudflare@beta mswThis package requires
mswas a peer dependency.
Let's say your worker performs a GET request to https://example.com/user.
// worker.ts
export default {
async fetch(req, env, ctx) {
const response = await fetch('https://api.example.com/user')
const user = await response.json()
return new Response(user.id, {
headers: { 'content-type': 'text/plain' },
})
},
}Here's how you can intercept and mock that third-party request in order to reliably test your worker in Vitest.
import { env } from 'cloudflare:workers'
import { createExecutionContext } from 'cloudflare:test'
import { http, HttpResponse } from 'msw'
import { setupNetwork } from '@msw/cloudflare'
import worker from './worker'
const network = setupNetwork()
beforeAll(() => {
network.enable()
})
afterEach(() => {
network.resetHandlers()
})
afterAll(() => {
network.disable()
})
it('responds with the user id', async () => {
network.use(
http.get('https://api.example.com/user', () => {
return HttpResponse.json({ id: 1, name: 'John Maverick' })
}),
)
const ctx = createExecutionContext()
const response = await worker.fetch(
new Request('http://localhost/'),
env,
ctx,
)
expect.soft(response.status).toBe(200)
await expect.soft(response.text()).resolves.toBe('1')
})