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

テストケースの記述

このテストケースでは、入力ファイル(file.jpg)のパラメータ化された入力(params.json)から期待される PNG レンディション(rendition.png)が生成されるとアサートします。

  1. 最初に、ワーカーはソースをレンディションにコピーするだけではなくなったので、/test/asset-compute/simple-worker にある自動生成されたテストケース simple-worker を削除します。

  2. PNG レンディションを生成するワーカーの正常な実行をテストするための、新しいテストケースフォルダーを /test/asset-compute/worker/success-parameterized に作成します。

  3. success-parameterized フォルダーに、このテストケースのテスト入力ファイルを追加し、ファイル名を file.jpg とします。

  4. success-parameterized フォルダーに、ワーカーの入力パラメーターを定義する params.json という名前の新しいファイルを追加します。

    code language-json
    {
        "size": "400",
        "contrast": "0.25",
        "brightness": "-0.50"
    }
    

    これらは、開発ツールの Asset Compute プロファイル定義に渡される同じキーと値から、worker キーを除いたものです。

  5. 期待されるレンディションファイルをこのテストケースに追加し、ファイル名を rendition.png とします。このファイルは、指定された入力 file.jpg に対するワーカーの期待される出力を表します。

  6. コマンドラインから、aio app test を実行してプロジェクトルートをテストします。

    • Docker Desktop とサポートする Docker イメージがインストール、実行されていることを確認します
    • 実行中の開発ツールインスタンスを終了します

テスト - 成功

テストケースのエラーチェックの記述

このテストケースでは、contrast パラメーターが無効な値に設定された場合に、ワーカーが適切なエラーをスローすることをテストします。

  1. contrast パラメーター値が無効なためにワーカーがエラーを実行するかどうかをテストする、新しいテストケースフォルダーを /test/asset-compute/worker/error-contrast に作成します。

  2. error-contrast フォルダーに、このテストケースのテスト入力ファイルを追加し、ファイル名を file.jpg とします。このファイルの内容は、このテストには重要ではありません。このテストケースで検証する rendition.instructions の有効性チェックに到達するための「破損したソース」チェックの通過に必要です。

  3. error-contrast フォルダーに、次のコンテンツを含むワーカーの入力パラメーターを定義する params.json という名前の新しいファイルを追加します。

    code language-json
    {
        "contrast": "10",
        "errorReason": "rendition_instructions_error"
    }
    
    • コントラストは -1 ~ 1 の範囲である必要があるので、contrast パラメーターに無効な値「10」を設定し、RenditionInstructionsError がスローされるようにします。
    • errorReason キーを、予期されるエラーに関連付けられた「理由」に設定し、テストで適切なエラーがスローされるとアサートします。この無効なコントラストパラメーターは、カスタムエラー RenditionInstructionsError をスローするので、errorReason にこのエラーの理由 rendition_instructions_error を設定し、これがスローされるとアサートします。
  4. エラーの実行中にレンディションは生成されないので、rendition.<extension> ファイルは必要ありません。

  5. aio app test コマンドを実行して、プロジェクトのルートからテストスイートを実行します。

    • Docker Desktop とサポートする Docker イメージがインストール、実行されていることを確認します
    • 実行中の開発ツールインスタンスを終了します

テスト - コントラストのエラー

Github のテストケース

最終的なテストケースは GitHub で次の場所から入手できます。

トラブルシューティング

recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69