テスト
Accellaプロジェクトには、初期化時点でVitestとその設定が含まれています。これにより、すぐにテストを開始することができます。
テストの実行
テストを実行するには、以下のコマンドを使用します:
npm run test
このコマンドを実行することで、プロジェクト内のすべてのテストが実行されます。
tests/sample.test.ts
にテストのサンプルが含まれています。こちらのファイルを参考にテストを追加してください。
テスト用データベースの設定
.env.test
に記載されているDATABASE_URL
の値を指定することで、テスト用データベースの設定を変更することができます。
DATABASE_URL="file:../test${VITEST_POOL_ID}.db"
Vitestは通常、マルチスレッドでテストを実行します。
各スレッドで異なるデータベースを使用するために、VITEST_POOL_ID
を使用してデータベースを分けるようにします。
SQLite以外(MySQLやPostgreSQL)を使用する場合は、データベース設定で.env
を変更したのと同様に、
.env.test
でテスト用データベースの設定も変更する必要があります。
MySQLの例
DATABASE_URL="mysql://root:@localhost:3306/test${VITEST_POOL_ID}"
PostgreSQLの例
DATABASE_URL="postgresql://test:password@localhost:5432/test${VITEST_POOL_ID}"
テスト実行時には、各データベース毎にマイグレーションが実行されます。
また、テスト毎にデータベースへの操作をロールバックするため、テスト間でデータが共有されることはありません。
これらの処理は tests/setup.ts
で実行されています。必要に応じて参照してください。
モデルのファクトリー
ファクトリーライブラリとしてAccel Record Factoryが用意されており、
モデルを初期化したりデータベースに保存するために利用できます。
スキーマを定義してモデルを追加すると tests/factories/
ディレクトリに各モデルに対応したファクトリーが自動で生成されます。
例えばUserモデルを定義した場合は、UserFactory
の定義を含むtests/factories/user.ts
が生成されます。
import { defineFactory } from "accel-record-factory";import { User } from "../../src/models/index.js";
export const UserFactory = defineFactory(User, { // firstName: "MyString", // lastName: "MyString", // age: 1,});
export { UserFactory as $User };
ファクトリーを使用することで、以下のようにテストコード内で簡単にモデルを作成することができます。
import { $User } from "./factories/user";
const newUser = $User.build();
const user = $User.create({ firstName: "John", lastName: "Doe", age: 20,});
デフォルト値の設定、連番の利用、関連の生成、Traitsなどの機能が利用できます。 詳細についてはAccel Record Factory READMEを参照してください。
Astroコンポーネントのテスト
Astroにより、Vitest上でのコンポーネントのテストもサポートされています。詳細については、Vitest and Container APIを参照してください。
End-to-endテスト
End-to-endテスト(E2Eテスト)は初期状態ではセットアップされていませんが、プロジェクトに追加することができます。 追加方法に関してはAstroドキュメントのEnd-to-end testsを参照してください。 Playwright、Cypress、NightwatchJSなどの導入方法が記載されています。