Token2022でpnpm clients:js:testすると「Rejected promise returned by test」エラー

Solana Token2022(Token Extensions) JavaScript client をテスト実行したときに発生したエラー。

現象

clientsのJSテストファイルを実行する。

pnpm clients:js:test

> @solana-program/token-2022@0.4.2 test /Users/256hax/Desktop/dev_space/token-2022/clients/js
> ava


  ✘ [fail]: createAssociatedToken › it creates a new associated token account Rejected promise returned by test
  ✘ [fail]: initializeMint › it creates and initializes a new mint account Rejected promise returned by test
  ✘ [fail]: initializeMint › it creates a new mint account with a freeze authority Rejected promise returned by test
  ✘ [fail]: withdrawExcess › it withdraws excess lamports from an associated token account Rejected promise returned by test
  ✘ [fail]: createNativeMint › it creates a native mint account Rejected promise returned by test
・・・省略・・・

原因

ターミナルAI Warp にエラーを読み込ませた。

テスト失敗調査の概要

根本原因:
テストの失敗は、テストがローカルのSolanaテストバリデータが実行されていることを前提としていたため発生していました。しかし、バリデータの起動スクリプトは、プログラムバイナリ「spl_elgamal_registry.so」が欠落していたため失敗していました。

発見された問題:

  1. Solanaテストバリデータが欠落: テストは、ローカルのSolana RPCエンドポイント(http://127.0.0.1:8899)とWebSocket(ws://127.0.0.1:8900)に接続することを想定しています。
  2. プログラム依存関係の欠落: ターゲット/デプロイ/ディレクトリからspl_elgamal_registry.soプログラムバイナリが欠落していました
  3. テスト実行方法の誤り: JSクライアントディレクトリでpnpm testを直接実行すると、バリデータが自動的に起動しません

対応

ターミナルAI Warp の対応結果。

適用した解決策:

  1. 欠落していたelgamal-registryプログラムを構築しました:
   pnpm confidential-transfer:elgamal-registry:build
  1. 正しいテストコマンドを使用しました:
   pnpm clients:js:test

このコマンドは自動的に:
• 必要なすべてのプログラムと共にSolanaテストバリデータを開始/再起動します
• JavaScriptクライアントを構築します
• テストを実行します
• プログラムの依存関係を適切に処理します

テスト結果:
• 修正前: 56件のテストがRPC接続エラーで失敗
• 修正後: 86件のテストすべてが正常に通過 ✅

テストスイートは現在、Token-2022のすべての機能を適切に検証しています。具体的には:
• 基本トークン操作(ミント、転送、バーン)
• すべてのトークン拡張機能(機密転送、転送手数料、メタデータなど)
• アカウントサイズ計算
• データエンコード/デコード

テストは、Token 2022プログラムとその依存関係をロードするローカルのSolanaテストバリデータに対して正しく実行されています。