在 Jest 中为 Cloudflare Worker 实例化 FetchEvent

Luk*_*arr 5 typescript jestjs cloudflare-workers

Cloudflare Workers 的TypeScript模板存储库有一个模拟 GET 请求的测试,通过Request实例化来模拟handleRequest.

但是,我后来修改了模板以将原始数据传递FetchEventhandleRequest方法,而不是FetchEvent.request(这是默认的)。现在,我需要FetchEvent在测试中实例化以传递到handleRequest,而不是Request

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

有没有一种方法可以模拟FetchEvent而不需要诉诸另一个外部依赖项(即在 Cloudflare Workers 库中)?

小智 2

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)
  })
})
Run Code Online (Sandbox Code Playgroud)

让我知道它是否有效