【问题标题】:Instantiate FetchEvent in Jest for a Cloudflare Worker在 Jest 中为 Cloudflare Worker 实例化 FetchEvent
【发布时间】:2022-04-10 00:16:45
【问题描述】:

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

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

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

有没有一种方法可以模拟 FetchEvent 而无需求助于另一个外部依赖项(即在 Cloudflare Workers 库中)?

【问题讨论】:

    标签: typescript jestjs cloudflare-workers


    【解决方案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)
      })
    })
    

    让我知道它是否有效

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 2019-05-23
      • 2019-04-18
      • 2020-04-18
      • 2023-01-14
      • 2019-03-10
      相关资源
      最近更新 更多