diff --git a/docs/testing/e2e.md b/docs/testing/e2e.md index 1df1e8c..cc996b3 100644 --- a/docs/testing/e2e.md +++ b/docs/testing/e2e.md @@ -5,7 +5,8 @@ E2Eテストを追加・変更した場合は、このドキュメントも更 ## 前提条件 - `gh` CLI が利用可能で、対象GitHubアカウントでログイン済みであること。 - `takt-testing` リポジトリが対象アカウントに存在すること(E2Eがクローンして使用)。 -- 必要に応じて `TAKT_E2E_PROVIDER` を設定すること(例: `claude` / `codex`)。 +- 必要に応じて `TAKT_E2E_PROVIDER` を設定すること(例: `claude` / `codex` / `opencode`)。 +- `TAKT_E2E_PROVIDER=opencode` の場合は `TAKT_E2E_MODEL` が必須(例: `opencode/big-pickle`)。 - 実行時間が長いテストがあるため、タイムアウトに注意すること。 - E2Eは `e2e/helpers/test-repo.ts` が `gh` でリポジトリをクローンし、テンポラリディレクトリで実行する。 - 対話UIを避けるため、E2E環境では `TAKT_NO_TTY=1` を設定してTTYを無効化する。 @@ -26,9 +27,11 @@ E2Eテストを追加・変更した場合は、このドキュメントも更 - `npm run test:e2e:provider`: `claude` と `codex` の両方で実行。 - `npm run test:e2e:provider:claude`: `TAKT_E2E_PROVIDER=claude` で実行。 - `npm run test:e2e:provider:codex`: `TAKT_E2E_PROVIDER=codex` で実行。 +- `npm run test:e2e:provider:opencode`: `TAKT_E2E_PROVIDER=opencode` で実行(`TAKT_E2E_MODEL` 必須)。 - `npm run test:e2e:all`: `mock` + `provider` を通しで実行。 - `npm run test:e2e:claude`: `test:e2e:provider:claude` の別名。 - `npm run test:e2e:codex`: `test:e2e:provider:codex` の別名。 +- `npm run test:e2e:opencode`: `test:e2e:provider:opencode` の別名。 - `npx vitest run e2e/specs/add-and-run.e2e.ts`: 単体実行の例。 ## シナリオ一覧 diff --git a/e2e/helpers/isolated-env.ts b/e2e/helpers/isolated-env.ts index 2aea4a7..8f1e24d 100644 --- a/e2e/helpers/isolated-env.ts +++ b/e2e/helpers/isolated-env.ts @@ -95,8 +95,17 @@ export function createIsolatedEnv(): IsolatedEnv { // Create TAKT config directory and config.yaml mkdirSync(taktDir, { recursive: true }); const baseConfig = readE2EFixtureConfig(); - const config = process.env.TAKT_E2E_PROVIDER - ? { ...baseConfig, provider: process.env.TAKT_E2E_PROVIDER } + const provider = process.env.TAKT_E2E_PROVIDER; + const model = process.env.TAKT_E2E_MODEL; + if (provider === 'opencode' && !model) { + throw new Error('TAKT_E2E_PROVIDER=opencode requires TAKT_E2E_MODEL (e.g. opencode/big-pickle)'); + } + const config = provider + ? { + ...baseConfig, + provider, + ...(provider === 'opencode' && model ? { model } : {}), + } : baseConfig; writeConfigFile(taktDir, config); diff --git a/package.json b/package.json index f205080..0b73765 100644 --- a/package.json +++ b/package.json @@ -20,8 +20,10 @@ "test:e2e:provider": "npm run test:e2e:provider:claude && npm run test:e2e:provider:codex", "test:e2e:provider:claude": "TAKT_E2E_PROVIDER=claude vitest run --config vitest.config.e2e.provider.ts --reporter=verbose", "test:e2e:provider:codex": "TAKT_E2E_PROVIDER=codex vitest run --config vitest.config.e2e.provider.ts --reporter=verbose", + "test:e2e:provider:opencode": "TAKT_E2E_PROVIDER=opencode vitest run --config vitest.config.e2e.provider.ts --reporter=verbose", "test:e2e:claude": "npm run test:e2e:provider:claude", "test:e2e:codex": "npm run test:e2e:provider:codex", + "test:e2e:opencode": "npm run test:e2e:provider:opencode", "lint": "eslint src/", "prepublishOnly": "npm run lint && npm run build && npm run test" },