Asset Compute ワーカーのテスト
Asset Compute プロジェクトは、Asset Compute ワーカーのテストを素早く作成して実行するためのパターンを定義します。
ワーカーテストの分析
Asset Compute ワーカーのテストはテストスイートに分けられ、各テストスイート内では、テスト条件をアサートする 1 つまたは複数のテストケースがあります。
Asset Compute プロジェクトのテストの構造は次のとおりです。
/actions/<worker-name>/index.js
...
/test/
asset-compute/
<worker-name>/ <--- Test suite for the worker, must match the yaml key for this worker in manifest.yml
<test-case-1>/ <--- Specific test case
file.jpg <--- Input file (ie. `source.path` or `source.url`)
params.json <--- Parameters (ie. `rendition.instructions`)
rendition.png <--- Expected output file (ie. `rendition.path`)
<test-case-2>/ <--- Another specific test case for this worker
...
各テストキャストには、以下のファイルを含めることができます。
-
file.<extension>- テストするソースファイル(
.link以外の任意の拡張子) - 必須
- テストするソースファイル(
-
rendition.<extension>- 期待されるレンディション
- 必須(エラーテストの場合を除く)
-
params.json- 単一レンディションの JSON 命令
- オプション
-
validate- 期待される実際のレンディションファイルのパスを引数として取得し、結果に問題がない場合は終了コード 0 を返し、検証または比較に失敗した場合は 0 以外の終了コードを返すスクリプト。
- オプション。デフォルトは
diffコマンド - 様々な検証ツールを使用するために、Docker run コマンドをラップするシェルスクリプトを使用
-
mock-<host-name>.json- 外部サービス呼び出しをモックするための JSON 形式の HTTP 応答。
- オプション。ワーカーコードが独自の HTTP リクエストを実行する場合にのみ使用
テストケースの記述
このテストケースでは、入力ファイル(file.jpg)のパラメータ化された入力(params.json)から期待される PNG レンディション(rendition.png)が生成されるとアサートします。
-
最初に、ワーカーはソースをレンディションにコピーするだけではなくなったので、
/test/asset-compute/simple-workerにある自動生成されたテストケースsimple-workerを削除します。 -
PNG レンディションを生成するワーカーの正常な実行をテストするための、新しいテストケースフォルダーを
/test/asset-compute/worker/success-parameterizedに作成します。 -
success-parameterizedフォルダーに、このテストケースのテスト入力ファイルを追加し、ファイル名をfile.jpgとします。 -
success-parameterizedフォルダーに、ワーカーの入力パラメーターを定義するparams.jsonという名前の新しいファイルを追加します。code language-json { "size": "400", "contrast": "0.25", "brightness": "-0.50" }これらは、開発ツールの Asset Compute プロファイル定義に渡される同じキーと値から、
workerキーを除いたものです。 -
期待されるレンディションファイルをこのテストケースに追加し、ファイル名を
rendition.pngとします。このファイルは、指定された入力file.jpgに対するワーカーの期待される出力を表します。 -
コマンドラインから、
aio app testを実行してプロジェクトルートをテストします。- Docker Desktop とサポートする Docker イメージがインストール、実行されていることを確認します
- 実行中の開発ツールインスタンスを終了します
テストケースのエラーチェックの記述
このテストケースでは、contrast パラメーターが無効な値に設定された場合に、ワーカーが適切なエラーをスローすることをテストします。
-
contrastパラメーター値が無効なためにワーカーがエラーを実行するかどうかをテストする、新しいテストケースフォルダーを/test/asset-compute/worker/error-contrastに作成します。 -
error-contrastフォルダーに、このテストケースのテスト入力ファイルを追加し、ファイル名をfile.jpgとします。このファイルの内容は、このテストには重要ではありません。このテストケースで検証するrendition.instructionsの有効性チェックに到達するための「破損したソース」チェックの通過に必要です。 -
error-contrastフォルダーに、次のコンテンツを含むワーカーの入力パラメーターを定義するparams.jsonという名前の新しいファイルを追加します。code language-json { "contrast": "10", "errorReason": "rendition_instructions_error" }- コントラストは -1 ~ 1 の範囲である必要があるので、
contrastパラメーターに無効な値「10」を設定し、RenditionInstructionsErrorがスローされるようにします。 errorReasonキーを、予期されるエラーに関連付けられた「理由」に設定し、テストで適切なエラーがスローされるとアサートします。この無効なコントラストパラメーターは、カスタムエラーRenditionInstructionsErrorをスローするので、errorReasonにこのエラーの理由rendition_instructions_errorを設定し、これがスローされるとアサートします。
- コントラストは -1 ~ 1 の範囲である必要があるので、
-
エラーの実行中にレンディションは生成されないので、
rendition.<extension>ファイルは必要ありません。 -
aio app testコマンドを実行して、プロジェクトのルートからテストスイートを実行します。- Docker Desktop とサポートする Docker イメージがインストール、実行されていることを確認します
- 実行中の開発ツールインスタンスを終了します
Github のテストケース
最終的なテストケースは GitHub で次の場所から入手できます。