クラウドコンピューティングが必要ですか? 今すぐ始める

Dark background with blue code overlay

Jest モック - EdgeWorkers のユニットテスト

Akamai author

執筆者

Varuna GP

September 08, 2021

Akamai author

執筆者

Varuna GP

Akamai Technologies の Associate Product Manager である Varuna は、製品開発チームと協力して、定量的な製品データの収集、消費者からのフィードバックの解釈、製品戦略の策定などの新機能を生み出しています。

注:このチュートリアルの手順は今後、変更される可能性があります。最新情報を GitHub でご確認ください。

まだ EdgeWorkers を使用していない場合は、これを使用することで、ユーザーに近接する 4,200 か所以上の場所で JavaScript コードを実行し、アプリケーションの応答時間を短縮できます。

多くのアプリケーション機能がエッジに移行しつつある今、各機能がそれぞれの役割を確実に果たすことがこれまで以上に重要となっています。ユニットテストでは、プログラムのセグメントごとにコードを実行し、入力と出力をチェックします。このようなテストによって開発者はプログラムの個々の領域を確認し、エラーの発生場所とその原因を知ることができます。テストを簡単に実行できるフレームワークはいくつかあります。たとえば、一般的なフレームワークとして、 JestMochaJasmineCypress などがありますへのアクセスを同期します。 

EdgeWorkers を使用すると、以下を目的とするモックテストをエッジで実行できます。

  • コードが構文的に有効であり、問題なく実行されることを Akamai での公開前に確認する

  • ビジネスロジックが正しく機能しているかどうかを検証する

  • 企業の安全なファイアウォールの背後で変更をテストする(リモートシステムに依存しない)

  • コードまたは Akamai の JavaScript バージョンの変更に関係なく、ビジネスロジックが機能することを確認する

このブログでは、Jest を使用した一連のユニットテストをセットアップし、変更をデプロイする前にビジネスロジックが正しく動作することを確認し、不具合のリスクを軽減する方法について説明します。

背景情報の概要

Jest は設定を必要とせず、最も簡単に学習できるフレームワークの 1 つです。同等のパッケージは npm(node)でも入手できないので、Node.js で EdgeWorkers API に対して JavaScript をテストできる Jest モックの例を作成することにしました。このようなマニュアルモックを使用すると、より正確に機能を制御できます。

EdgeWorkers リポジトリには、EdgeWorkers API 用の Jest モックセットが用意されています。Akamai EdgeWorkers の実行環境には、モジュールとオブジェクトのセットが提供されています。

注:テストは Node で実行されます。Node と EdgeWorkers は両方とも V8 で動作しますが、EdgeWorkers に対して明示的に無効になっている機能もあり、EdgeWorkers には時間とメモリに関しての実行制限があるため、開発者は Node API を使用しないよう注意する必要があります。

では、始めましょう。

EdgeWorkers の構成

EdgeWorkers は次の要素で構成されています。

src - main.js と bundle.json の場所。追加モジュールはすべてここにあります。

test - ユニットテスト

テストの作成と実行

ステップ 1:新プロジェクトの開始

新プロジェクトの作成には、次のコマンドを実行します。

  npm init

ステップ 2:ノードモジュールのインストール

ここでは、インストールする必要がある node モジュールの取得と、設定ファイルのセットアップについて説明します。

このプロジェクトのモックは node モジュール edgeworkers-jest-mocksとしてパブリッシュされます。このモジュールをインストールするためには、次のコマンドを実行します。

  npm install --save-dev edgeworkers-jest-mocks

ステップ 3:package.json の設定

package.json ファイルに次のように設定します。

テストスクリプトを Jest に設定する

 

  "scripts": {
  "test": "jest"
},

Jest を設定する

EdgeWorkers API のモックを簡単にインポートできるように、まず Jest を設定します。

  "jest": {
  "testEnvironment": "node",
  "transformIgnorePatterns": [
    "node_modules/(?!edgeworkers-jest-mocks/__mocks__)"
  ],
  "moduleDirectories": [
    "node_modules",
    "node_modules/edgeworkers-jest-mocks/__mocks__"
  ]
}

ステップ 4:babel.config.json の設定

Babel は、Akamai EdgeWorkers が使用する ECMAScript の新しいバージョンに対応するための依存関係として含まれています。これを正しく設定するためには、babel.config.json ファイルとして以下を追加します。

注:まだファイルがない場合は、JSON ファイルを作成し、babel.config.json という名前にする必要があります。

  {
  "presets": ["@babel/preset-env"],
  "plugins": [
    ["@babel/transform-runtime"]
  ]
}

ステップ 5:テストの作成

EdgeWorkers またはその関数を main.js ファイルからインポートすれば、必要なテストを作成できます。また、 EdgeWorkers イベントハンドラー に対するテストを作成する場合は、Request または Response のモックを作成してから、そのモックでイベントハンドラー関数を呼び出す必要があります。

以下は src/main.js に入っている、EdgeWorkers に対する Jest テストの簡単な例です。

  import * as edgeworker from "../src/main.js";
import Request from 'request';

describe('Simple Example', () => {

    beforeEach(() => {
        jest.clearAllMocks();
    });
  
    test("functional test against onClientRequest", async () => {
        let requestMock = new Request();
        edgeworker.onClientRequest(requestMock);

        expect(requestMock.respondWith).toHaveBeenCalledTimes(1);
        expect(requestMock.respondWith).toHaveBeenCalledWith(200, {}, "<html><body><h1>Test Page</h1></body></html>");
    });

    test("unit test an edgeworker function", async () => {
        let result = edgeworker.someFunction(42);

        expect(result != null);
    });

}); 

ステップ 6:テストの実行

テストは Jest フレームワークを通じて提供されます。ユニットテストを実行する際には、コマンドラインから次のコマンドを実行します。

  npm test

これにより、test ディレクトリ内のすべてのテストが Jest の規則に従って実行されます。

詳細については、以下のリソースをご覧ください。Akamai は、開発者向けのツールやリソースを継続的に拡大し、Akamai との連携作業がシンプルになるよう努めています。

その他のリソース

これらのコードサンプルで問題が発生した場合は、GitHub で issue を作成してください。または、 EdgeWorkers Slack スペースに感謝申し上げます。



Akamai author

執筆者

Varuna GP

September 08, 2021

Akamai author

執筆者

Varuna GP

Akamai Technologies の Associate Product Manager である Varuna は、製品開発チームと協力して、定量的な製品データの収集、消費者からのフィードバックの解釈、製品戦略の策定などの新機能を生み出しています。