メインコンテンツへスキップ
injective-test-tubeは、CosmWasmとInjectiveを統合したテストライブラリであり、モックではなく実際のチェーンロジックに対してコントラクトをテストできる点が特徴です。 devブランチは現在プライベートなリポジトリに依存していますが、公開済みのバージョンを代わりに利用できます。機能とアップデート情報については、CHANGELOGを参照してください。

はじめに

injective-test-tubeの動作を示すために、シンプルなサンプルコントラクトとしてcw-pluscw-whitelistを使用します。 テストのセットアップは以下のとおりです:
これで、初期残高を持ちappchainと相互作用可能なインメモリのappchainインスタンスとアカウントが作成されます。 これはDockerコンテナや外部プロセスを起動するのではなく、appchainのコードをライブラリとしてロードし、インメモリ上で実行される点が特徴です。 なお、init_accountsは同一の初期残高を持つ複数アカウントを一括作成できるユーティリティ関数です。 1つのアカウントのみを作成したい場合は、init_accountを使用します。
\u0001\u0001\u0001 CosmWasmコントラクトをテストするには、以下が必要です:
  • wasmファイルをビルドする
  • コードをstoreする
  • インスタンス化する
その後、コントラクトとの対話を開始できます。実際にやってみましょう。
この例では、シンプルなデモのためにcw-plus releaseからwasmバイトコードをロードしています。実際には、cargo wasmを実行してtarget/wasm32-unknown-unknown/release/<contract_name>.wasmにあるwasmファイルを使用することになるでしょう。
次に、コントラクトを実行し、コントラクトの状態が正しく更新されることを検証してみましょう。

デバッグ

コントラクトコードの中でデバッグしたい場合は、deps.api.debug(..)を使用すると、デバッグメッセージをstdoutに出力できます。wasmdではこれはデフォルトで無効化されていますが、InjectiveTestAppはstdoutへの出力を許可しているため、テスト実行中にスマートコントラクトのデバッグが可能です。

Module Wrapperの使用

場合によっては、環境のセットアップやappchainの状態クエリのために、appchainロジックと直接対話したいことがあります。Module wrapperは、appchainのモジュールと対話するための便利な関数を提供します。 Exchangeモジュールと対話する例を見てみましょう:
その他の例はmodulesディレクトリで確認できます。

バージョニング

injective-test-tubeのバージョンは、その依存関係であるinjectiveとtest-tubeのバージョン、およびそれ自身の変更によって決定されます。バージョンはA.B.Cの形式で表され、それぞれは以下を意味します:
  • Aはinjectiveのメジャーバージョン
  • Bはtest-tubeのマイナーバージョン
  • Cはinjective-test-tube自身のパッチ番号
injectiveの新バージョンがリリースされ破壊的変更を含む場合、test-tubeにも破壊的変更があればリリースし、injective-test-tubeのメジャーバージョンをインクリメントします。これにより、新しいバージョンのinjective-test-tubeが以前のバージョンと後方互換性がないことが明確になります。 injective-test-tubeに後方互換性のある新機能を追加する場合は、マイナーバージョン番号がインクリメントされます。 injective-test-tube固有のバグ修正やその他の後方互換性のある変更を行う場合は、パッチ番号がインクリメントされます。 破壊的変更がある場合に備えて、パッケージのアップグレードガイドを確認してください。 なお、パッケージのバージョンは依存関係のバージョンとは独立して管理される点にご注意ください。
最終更新日 2026年5月11日