本文へ移動

Cloudflare でのテスト ​

@cloudflare/vitest-pool-workers を使うと、Cloudflare でのテストを簡単に実装できます。事前にいくつかの設定が必要です。詳しくは Cloudflare のテストドキュメントを参照してください。

Vitest の Workers プールを使った Cloudflare のテストでは、実行時に cloudflare:test モジュールが提供されます。このモジュールは、テスト時に第 2 引数として渡す環境オブジェクトを公開します。詳しくは Cloudflare のテスト APIを参照してください。

設定例を示します。

ts
import { defineWorkersProject } from '@cloudflare/vitest-pool-workers/config'

export default defineWorkersProject(() => {
  return {
    test: {
      globals: true,
      poolOptions: {
        workers: { wrangler: { configPath: './wrangler.toml' } },
      },
    },
  }
})
toml
compatibility_date = "2024-09-09"
compatibility_flags = [ "nodejs_compat" ]

[vars]
MY_VAR = "my variable"

次のようなアプリケーションを想定します。

ts
// src/index.ts
import { Hono } from 'hono'

type Bindings = {
  MY_VAR: string
}

const app = new Hono<{ Bindings: Bindings }>()

app.get('/hello', (c) => {
  return c.json({ hello: 'world', var: c.env.MY_VAR })
})

export default app

cloudflare:test モジュールが公開する env を app.request() に渡すと、Cloudflare のバインディングを使ってアプリケーションをテストできます。

ts
// src/index.test.ts
import { env } from 'cloudflare:test'
import app from './index'

describe('Example', () => {
  it('Should return 200 response', async () => {
    const res = await app.request('/hello', {}, env)

    expect(res.status).toBe(200)
    expect(await res.json()).toEqual({
      hello: 'world',
      var: 'my variable',
    })
  })
})

関連情報 ​

@cloudflare/vitest-pool-workers の GitHub リポジトリの例
旧テストシステムからの移行

MIT ライセンスで公開されています。