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 で次の場所から入手できます。