【问题标题】: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)
})
})
让我知道它是否有效