在Jest中为Cloudflare Worker实例化FetchEvent



Cloudflare Workers的TypeScript模板库有一个模拟GET请求的测试,其中Request被实例化以模拟handleRequest的输入参数。

然而,我已经修改了模板,将原始的FetchEvent传递给handleRequest方法,而不是FetchEvent.request(这是默认的)。现在,我需要在测试中实例化FetchEvent,以便传递给handleRequest,而不是Request

我可以从哪里导入FetchEvent?我的第一个想法是将node-fetch添加为开发依赖项,但看起来该库不提供FetchEvent实现。

是否有一种方法来模拟FetchEvent而不需要诉诸于另一个外部依赖(即在Cloudflare Workers库中)?

import { handleEvent } from '../src/handler'
import makeServiceWorkerEnv from 'service-worker-mock'
declare var global: any
function createEvent(request: Request): FetchEvent {
// @ts-ignore Sadly the typing seem to be off here, creating a FetchEvent is valid in a test environment.
return new FetchEvent('fetch', { request })
}
describe('handle', () => {
beforeEach(() => {
Object.assign(global, makeServiceWorkerEnv())
jest.resetModules()
})
test('handle GET', async () => {
const fetchEvent: FetchEvent = createEvent(
new Request('/', { method: 'GET' }),
)
const result = await handleEvent(fetchEvent)
expect(result.status).toEqual(200)
})
})

让我知道它是否有效

最新更新