テスト¶
本プラグインは、Jest または Vitest を使用する ReScript プロジェクト向けに統合テスト実行機能を提供します。テストはコンパイル済みの JavaScript 出力に対して実行され、結果は IntelliJ の標準テストランナー UI に表示されます。ファイルパスは元の .res ソースファイルにマッピングされます。
サポートされるテストフレームワーク¶
Native
フレームワーク |
検出方法 |
デフォルトコマンド |
|---|---|---|
Jest |
|
|
Vitest |
|
|
Custom |
手動設定 |
ユーザー定義 |
プラグインはプロジェクトが使用しているフレームワークを自動的に検出します。両方が存在する場合は、Vitest が優先されます。
組み込みのフレームワーク検出により、プラグインの手動設定なしですぐにテストを実行できます — お好みのテストフレームワークをインストールするだけで、残りはプラグインが処理します。
Jest の設定¶
ReScript で Jest を使用するには、以下のセットアップが必要です:
1. 依存関係のインストール:
{
"devDependencies": {
"jest": "^29.0.0",
"jest-teamcity": "^1.9.0",
"@glennsl/rescript-jest": "^0.11.0"
}
}
jest-teamcity レポーターは、プラグインがテスト結果を解析してテストツリー UI に表示するために必要です。これがない場合、テスト出力は構造化されないプレーンなコンソールテキストとして表示されます。
2. ReScript 向けの Jest 設定:
コンパイル済み JavaScript 出力を参照する jest.config.js(または jest.config.ts)を作成します:
{
"testMatch": ["**/lib/js/test/**/*_test.bs.js", "**/lib/js/test/**/*Test.bs.js"],
"moduleDirectories": ["node_modules"],
"transform": {}
}
Jest 設定のポイント:
testMatch --
.resソースファイルではなく、lib/js/ディレクトリ内のコンパイル済み.bs.jsファイルを指定します。Jest は JavaScript を実行するため、コンパイル済みの出力が必要です。transform --
{}(空のオブジェクト) に設定して、すべてのトランスフォームを無効にします。ReScript はすでに JavaScript にコンパイルされているため、追加のトランスパイルは不要です。moduleDirectories -- 依存関係の解決のために
node_modulesが含まれていることを確認してください。
lib/ 配下の正確なパスは rescript.json の設定に依存します。一般的なパターンは以下の通りです:
|
コンパイル出力パス |
|---|---|
|
|
|
|
|
|
Vitest の設定¶
ReScript で Vitest を使用するには、以下のセットアップが必要です:
1. 依存関係のインストール:
{
"devDependencies": {
"vitest": "^1.0.0"
}
}
Vitest には TeamCity レポーターが組み込まれているため、追加のレポーターパッケージは不要です。
2. ReScript 向けの Vitest 設定:
vitest.config.ts(または vitest.config.js)を作成します:
{
"test": {
"include": ["lib/js/test/**/*_test.bs.js", "lib/js/test/**/*Test.bs.js"],
"passWithNoTests": true
}
}
Vitest 設定のポイント:
include -- Jest と同様に、
lib/js/内のコンパイル済み JavaScript ファイルを指定します。passWithNoTests -- テストが一致しない場合(例: 初期セットアップ時)に失敗を回避するために推奨されます。
Vitest は
runフラグ付き(npx vitest run)で実行され、ウォッチモードに入らずにテストを一度実行して終了します。
テストの実行¶
Native
エディタからの実行¶
ReScript テストファイル(
.res)を開きますテスト関数を右クリックします
Run を選択してテストを実行します
実行構成からの実行¶
Run → Edit Configurations → + → ReScript Test
テストフレームワーク(Jest、Vitest、または Custom)を選択します
必要に応じてテストファイルパスとテスト名フィルターを設定します
作業ディレクトリを設定します(デフォルトはプロジェクトルート)
Run をクリックします
設定オプション¶
オプション |
説明 |
|---|---|
Framework |
Jest、Vitest、または Custom |
Working directory |
|
Test file path |
特定のテストファイルへのパス(空にするとすべてのテストを実行) |
Test name |
名前でテストをフィルタリング( |
Additional arguments |
テストランナーに渡す追加の CLI フラグ |
テストの自動検出¶
Native
プラグインはテストファイルとフレームワークの検出に 2 つのメカニズムを使用します:
フレームワークの検出¶
RescriptTestFrameworkDetector は以下を調べることで、プロジェクトが使用しているテストフレームワークを特定します:
package.jsonの dependencies --dependenciesとdevDependenciesの両方でvitestまたはjestを確認します。vitestが見つかった場合、jestより優先されます。設定ファイル --
package.jsonでの検出に失敗した場合、プロジェクトルートでフレームワーク固有の設定ファイルを探します:
設定ファイル |
フレームワーク |
|---|---|
|
Vitest |
|
Vitest |
|
Vitest |
|
Jest |
|
Jest |
|
Jest |
テストファイルの検出¶
プラグインは命名規則に基づいてファイルをテストファイルとして自動的に認識します。.res または .resi ファイルは、ファイル名(拡張子を除く)が以下のいずれかのサフィックスで終わる場合にテストファイルとして扱われます:
_test(例:Math_test.res)Test(例:MathTest.res)_spec(例:Math_spec.res)Spec(例:MathSpec.res)
このパターンに一致するファイルを右クリックすると、プラグインは検出されたフレームワークとファイルパスが事前入力された ReScript Test 実行構成を自動的に作成することを提案します。
テストフレームワークとテストファイルの自動検出により手動設定が不要になります — プラグインはテストセットアップを認識し、すぐに適切な実行オプションを提供します。
参考
実行とビルド では、ReScript プロジェクトのビルド用実行構成について説明しています。
テスト結果¶
Native
テスト結果は IntelliJ の標準テストランナー UI(SMTestRunner)に表示されます。
テストツリー構造¶
テスト結果パネルには階層的なツリーが表示されます:
Root -- テスト実行全体
Test Suite --
describeブロック(またはテストファイル)に対応Test Case -- 個別のテスト(
testまたはitブロック)
各ノードには以下が表示されます:
合否インジケーター -- 成功したテストには緑のチェックマーク、失敗には赤のバツ印
テスト名 --
test()またはit()の呼び出しで指定した名前文字列実行時間 -- 各テストの実行時間
出力 -- テスト中にキャプチャされた標準出力/標準エラー出力
TeamCity レポーターの統合¶
プラグインは TeamCity 形式のレポーターを使用してテスト結果を構造化されたツリー UI に解析します:
Jest:
jest-teamcityレポーターを使用します。プラグインは Jest のコマンドラインに--reporters=default --reporters=jest-teamcityを自動的に追加します。Vitest: 組み込みの
teamcityレポーターを使用します。プラグインは Vitest のコマンドラインに--reporter=default --reporter=teamcityを自動的に追加します。
default レポーターは TeamCity レポーターと併せて含まれており、人間が読みやすい出力がコンソールに引き続き表示されるようにしています。
動作の仕組み¶
テストフレームワークのバインディング(例:
@glennsl/rescript-jest)を使用して.resファイルにテストを記述しますReScript コンパイラがテスト
.resファイルをlib/フォルダ内の JavaScript にコンパイルしますプラグインが TeamCity レポーターを含めて、コンパイル済みの
.jsファイルを Jest または Vitest で実行しますテスト出力が IntelliJ の SMTestRunner によって構造化されたテストツリーに解析されます
テスト結果のファイルパスが元の
.resソースファイルにマッピングされます
// src/test/Math_test.res
open Jest
describe("Math utilities", () => {
test("addition", () => {
expect(MathUtils.add(1, 2))->toBe(3)
})
test("multiplication", () => {
expect(MathUtils.multiply(3, 4))->toBe(12)
})
})
プラグインは ReScript ソースファイルとコンパイル済み JavaScript テスト実行のギャップを埋め、テストインフラがコンパイルとパスマッピングを透過的に処理する間、完全に .res ファイルで作業できます。
トラブルシューティング¶
"Module not found" でテストが失敗する¶
原因: テストランナーの実行前に ReScript コンパイラがテストファイルをコンパイルしていません。
解決方法: テスト実行前に ReScript の Build を実行するか、Build (Watch) が実行中であることを確認してください。テストランナーはコンパイル済みの JavaScript を実行するため、.bs.js ファイルが lib/ ディレクトリに存在する必要があります。
# Compile first, then run tests
npx rescript build
npx jest
Tip
開発中は Build (Watch) 実行構成を常に実行しておきましょう。これにより、テスト実行時にコンパイル出力が常に最新の状態に保たれます。
テストツリーに構造化された結果ではなくプレーンテキストが表示される¶
原因: TeamCity レポーターがインストールされていないか、設定されていません。
解決方法:
Jest の場合:
jest-teamcityを開発依存としてインストールします(npm install --save-dev jest-teamcity)Vitest の場合: 組み込みの TeamCity レポーターを含む Vitest 1.0 以降を使用していることを確認してください
プラグインはレポーターフラグを自動的に追加しますが、レポーターパッケージがプロジェクトにインストールされている必要があります。
"package.json not found" エラー¶
原因: 実行構成の作業ディレクトリに package.json ファイルが含まれていません。
解決方法: 実行構成の Working directory をプロジェクトルート(package.json と rescript.json を含むディレクトリ)に設定してください。通常は自動検出されますが、モノレポ構成では手動調整が必要な場合があります。
フレームワークが検出されない¶
原因: テストフレームワークが package.json の dependencies に記載されていません。
解決方法: package.json の dependencies または devDependencies に jest または vitest が記載されていることを確認してください。または、実行構成でフレームワークを手動で選択するか、ユーザー定義コマンドで Custom フレームワークオプションを使用してください。
注釈
テスト実行には、ReScript プロジェクトがテストフレームワークで適切に設定され、ReScript コンパイラがテストファイルをすでにコンパイルしている必要があります。プラグインはテスト実行前に ReScript ビルドを自動的にトリガーしません。
これらのトラブルシューティングのヒントは最も一般的なテストセットアップの問題に対処し、修正が通常は依存関係の欠如や古いコンパイル結果である場合にビルドパイプラインのデバッグを省けます。