1
1

単体テストマニュアル1 - プロジェクトにテスト環境を構築する

Last updated at Posted at 2024-07-23

インストール Vitest

以下のコマンドで、Vitest をインストールします。

pnpm i vitest -D
# あるいは
yarn add vitest -D
# あるいは
npm i vitest -D

Vitest が Develop 環境に使われるので、-D を必ずつけてインストールしてください。

pnpm でインストールするのがおすすめです。

vitest.config.ts 設定

もしプロジェクト内に vitest.config.tsvite.config.ts が共存する場合、vitest.config.ts の設定が vite.config.ts の設定よりも優先され、上書きされます。

以下の vitest.config.ts ファイルを行ごとにコメントで解説します。

// `vitest/config` の `defineConfig` を使用します。
import { defineConfig } from "vitest/config";
import path from "path";

// glob パターンを利用して、
// テストに含む全てのファイルを定義します。
const include = [
  "shared/**/*.spec.{ts,js}",
  "auth/**/*.spec.{ts,js}",
  "public/**/*.spec.{ts,js}",
  "components/**/*.spec.{ts,js}",
  "features/**/*.spec.{ts,js}",
];

// カバレッジに含む全てのファイルを定義します。
const coverageInclude = [
  "shared/**/*.{ts,js}",
  "auth/**/*.{ts,js}",
  "public/**/*.{ts,js}",
  "components/**/*.{ts,js}",
  "features/**/*.{ts,js}",
];

// テスト不要のファイルを定義します。
const defaultExclude = [
  // node_modules に含まれる .ts と .js 拡張子のファイル
  "node_modules/**/*.{ts,js}",
  // パッケージング後の成果物に含まれる .ts と .js 拡張子のファイル
  "out/**/*.{ts,js}",
  // E2Eテストとコンポーネントテストのディレクトリに含まれる .ts と .js 拡張子のファイル
  "tests/**/*.{ts,js}",
  // 設定ファイル
  "**/*.config.{ts,js}",
  // story に関するファイル
  "**/*.stories.{ts,js}",
  ".storybook/*.{ts,js}",
  // .next に含まれる .ts と .js 拡張子のファイル
  ".next/**/*.{ts,js}",
  // 型定義ファイル
  "**/*.d.ts",
  // ダミーデータを定義しているファイル
  "**/*dummy*.{ts,js}",
  "**/*sample*.{ts,js}",
  // スタイルファイル
  "**/*Style*.{ts,js}",
];

// glob パターンマッチングでカバーされていない、テスト不要のファイルは指定されたパスで除外します。
const specificFilesExclude = [
  // 特定のファイルのパス
  "auth/aw-exports.ts",
  "components/input/IconInputValidation.ts",
  // ...
];

// テスト不要の全てのファイルを定義します。
const excludedFiles = [...defaultExclude, ...specificFilesExclude];

export default defineConfig({
  // `vitest` を設定するには、設定ファイルに `test` 属性を追加する必要があります。
  test: {
    // Vitest のデフォルトのテスト環境は Node.js 環境です。
    // Webアプリケーションを構築している場合は、Node.js を jsdom や happy-dom などのブラウザライクな環境に置き換えることができます。
    environment: "happy-dom",
    // テストファイルを含む glob パターンを定義します。
    include,
    // テストファイルを除外する glob パターンを定義します。
    exclude: excludedFiles,
    // テストカバレッジデータを収集するには、coverage 属性を追加する必要があります。
    coverage: {
      // provider でテストカバレッジデータを収集するツールを選択します。
      provider: "v8",
      // テストカバレッジデータの収集を有効にします。
      enabled: true,
      // テストが失敗しても、カバレッジレポートは生成されます。
      reportOnFailure: true,
      // テストカバレッジレポーターの形式を設定します。
      reporter: ["text", "json", "html"],
      // テストカバレッジに含まれるテスト対象の glob パターンを定義します。
      include: coverageInclude,
      // テストカバレッジから除外されるテスト対象の glob パターンを定義します。
      exclude: excludedFiles,
    },
  },
  resolve: {
    alias: {
      "@": path.resolve(__dirname, "./"),
    },
  },
});

ディレクトリ構造

テストファイルはテスト対象モジュールと並列に __tests__ ディレクトリに配置します。

store
  ├── __tests__
  │       ├── utils
  │       │     └── index.spec.ts
  │       └── count.spec.ts
  ├── count.ts
  └── utils
        └── index.ts

store ディレクトリにさらに深いディレクトリ構造が存在する場合は、__tests__ ディレクトリも同じ構造を維持するべきです。

テストファイルの命名

各テストファイルは一つのモジュールまたはコンポーネントのみをテストします。

テストファイルの命名は *.spec.ts をします。

例えば、count.ts のテストファイルは count.spec.ts とします。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1