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)
})
})
让我知道它是否有效