コンテンツにスキップ

テスト

Accellaプロジェクトには、初期化時点でVitestとその設定が含まれています。これにより、すぐにテストを開始することができます。

テストの実行

テストを実行するには、以下のコマンドを使用します:

Terminal window
npm run test

このコマンドを実行することで、プロジェクト内のすべてのテストが実行されます。

tests/sample.test.ts にテストのサンプルが含まれています。こちらのファイルを参考にテストを追加してください。

テスト用データベースの設定

.env.test に記載されているDATABASE_URLの値を指定することで、テスト用データベースの設定を変更することができます。

.env.test
DATABASE_URL="file:../test${VITEST_POOL_ID}.db"

Vitestは通常、マルチスレッドでテストを実行します。 各スレッドで異なるデータベースを使用するために、VITEST_POOL_IDを使用してデータベースを分けるようにします。

SQLite以外(MySQLやPostgreSQL)を使用する場合は、データベース設定.envを変更したのと同様に、 .env.testでテスト用データベースの設定も変更する必要があります。

MySQLの例

.env.test
DATABASE_URL="mysql://root:@localhost:3306/test${VITEST_POOL_ID}"

PostgreSQLの例

.env.test
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が生成されます。

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 };

ファクトリーを使用することで、以下のようにテストコード内で簡単にモデルを作成することができます。

tests/user.test.ts
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などの導入方法が記載されています。