typescript - Jest içinde Cloudflare Worker için FetchEvent Başlatma


Cloudflare Workers için TypeScript şablon deposu, bir GET isteğini taklit etmek için bir test içerir; bu testte Request, handleRequest için girdi parametrelerini taklit etmek amacıyla örneklenir.

Bununla birlikte, şablonu artık FetchEvent.request (varsayılan olan) yerine FetchEvent'i doğrudan handleRequest metoduna geçirmek için değiştirdim. Şimdi, handleRequest'e geçirmek için testimde Request yerine FetchEvent'i örneklemem gerekiyor.

FetchEvent'i nereden içe aktarabilirim? İlk aklıma gelen, node-fetch'i bir geliştirici bağımlılığı olarak eklemekti, ancak görünüşe göre bu kütüphane bir FetchEvent uygulaması sağlamıyor.

Başka bir harici bağımlılığa başvurmaya gerek duymadan (yani Cloudflare Workers kütüphanesi içinde) FetchEvent öğesini taklit etmenin bir yolu var mı?

Cevap #1

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)
  })
})

İşe yarayıp yaramadığını bana bildir

İlgili makaleler