chobitmail
ドキュメントAPI Docslogin

Playwright

公式パッケージ @chobitmail/playwright は、Playwright テストごとにワンタイム受信箱を作成・削除し、OTP や確認リンクを待つ fixture を提供します。

生の REST で 408 再接続ループを書く必要はありません。

必要条件

  • Node.js 18+
  • ESM("type": "module" または bundler)
  • @playwright/test >= 1.42.0(peer)

インストール

pnpm add -D @chobitmail/playwright
export CHOBITMAIL_API_KEY=cbm_live_...

キーははじめにのとおりダッシュボードで発行します。

AI コーディングエージェント向け Skill もあります。

npx skills add chobitapp/chobitmail-skills

最短の例

import { test, expect } from "@chobitmail/playwright";

test("サインアップの認証コードを検証できる", async ({ page, inbox }) => {
  await page.goto("https://myapp.example/signup");
  await page.getByLabel("Email").fill(inbox.address);
  await page.getByRole("button", { name: /sign up|登録/i }).click();

  // OTP は waitForCode(waitForOtp ではない)
  const code = await inbox.waitForCode({ subject: "認証コード" });
  await page.getByLabel(/code|otp|認証/i).fill(code);
  await page.getByRole("button", { name: /submit|確認/i }).click();

  await expect(page.getByText(/完了|welcome/i)).toBeVisible();
  // inbox は fixture がテスト終了時に DELETE
});

主な API

Fixture / API 役割
inbox テストごとに自動作成・自動削除
chobitmail 共有クライアント(追加受信箱・usage)
inboxOptions test.use({ inboxOptions: { ttl, autoCreate, autoDelete } })
inbox.waitForMessage 長ポーリング + 408 再接続
inbox.waitForCode 条件に合う最初のメールから OTP
inbox.waitForLink 条件に合う最初のメールから URL
ChobitmailClient fixture なしで利用
runWithInbox create / use / delete のライフサイクル補助

選択の意味(fail-fast)

waitForCode / waitForLink は、subject / from / timestamp_*最初にマッチした 1 通を見ます。 そのメールに codes/links が無ければ ChobitmailSelectionError で失敗し、後続メールを待ちません。

対策:

  1. subject / from を OTP・確認メールのテンプレートに絞る
  2. timestamp_from(テスト開始時刻の ms)で以前のノイズを除外する
  3. または waitForMessage で自分で message.codes / message.links を選ぶ

確認リンク

const link = await inbox.waitForLink({
  subject: "確認",
  includes: "/verify",
});
await page.goto(link);

他 fixture との合成(mergeTests

// fixtures/index.ts
import { mergeTests } from "@playwright/test";
import { test as chobitmailTest, expect } from "@chobitmail/playwright";
import { authTest } from "./auth";

export const test = mergeTests(chobitmailTest, authTest);
export { expect };

手動で受信箱を扱う

test.use({ inboxOptions: { autoCreate: false } });

test("manual", async ({ chobitmail }) => {
  const box = await chobitmail.createInbox({ ttl: 600 });
  try {
    // ...
  } finally {
    await box.delete();
  }
});

CI

# GitHub Actions
env:
  CHOBITMAIL_API_KEY: ${{ secrets.CHOBITMAIL_API_KEY }}

無料枠の同時アクティブ受信箱は未検証で 1 です。メール依存プロジェクトでは並列を抑えてください。

// playwright.config.ts
export default defineConfig({
  workers: 1, // free の concurrent=1 向け
});

送信元ドメインを検証すると同時枠と日次上限が広がります。詳しくは送信元ドメイン検証

リポジトリ

API の生エンドポイントは API 利用ガイド/api/docs を参照してください。