方法: Azure Fluid Relay でテスト自動化を使用する

コードの品質を維持し、長期にわたって使用できるようにするには、テストと自動化が不可欠です。 Fluid では、内部で MochaJestPuppeteerWebpack を利用したさまざまな単体および統合テストを使用しています。

テストを実行するには、ローカルの @fluidframework/azure-local-service を使用するか、Azure Fluid Relay サービスのテスト テナントを使用できます。 AzureClient は、リモート サービスとローカル サービスの両方に接続するように構成できます。これにより、ライブおよびローカルのサービス インスタンスに対するテスト間で単一のクライアントの種類を使用できます。 唯一の違いは、クライアントの作成に使用される構成です。

Azure Fluid Relay に対する自動化

自動化により、運用環境のテナントと同じ方法で Azure Fluid Relay のテスト テナントに接続でき、必要なのは適切な接続構成のみです。 詳細については、「方法: Azure Fluid Relay サービスに接続する」を参照してください。

適応性のあるテスト クライアントの作成

適応性のあるテスト クライアントを作成するためには、サービス ターゲットに応じて異なる方法で AzureClient を構成する必要があります。 次の関数では、環境変数を使用してこれを決定します。 テスト スクリプトで環境変数を設定して、ターゲットとなるサービスを制御することができます。

function createAzureClient(): AzureClient {
    const useAzure = process.env.FLUID_CLIENT === "azure";
    const tenantKey = useAzure ? process.env.FLUID_TENANTKEY as string : "";
    const user = { id: "userId", name: "Test User" };

    const connectionConfig = useAzure ? {
        type: "remote",
        tenantId: "myTenantId",
        tokenProvider: new InsecureTokenProvider(tenantKey, user),
        endpoint: "https://myServiceEndpointUrl",
    } : {
        type: "local",
        tokenProvider: new InsecureTokenProvider("", user),
        endpoint: "http://localhost:7070",
    };
    const clientProps = {
        connection: config,
    };

    return new AzureClient(clientProps);
}

テストでは、この関数を呼び出して、基になるサービスを考慮することなく AzureClient オブジェクトを作成できます。 次の Mocha テストでは、テストを実行する前にサービス クライアントを作成し、それを使用して各テストを実行します。 サービス クライアントを使用して、エラーがスローされない限りテストを通過するコンテナーを作成するテストが 1 つあります。

describe("ClientTest", () => {
    const client = createAzureClient();
    let documentId: string;

    it("can create Azure container successfully", async () => {
        const schema: ContainerSchema = {
            initialObjects: {
                customMap: SharedMap
            },
        };
        documentId = await container.attach();
        const { container, services } = await azureClient.createContainer(schema);
    });
});

テストを実行する

プロジェクトの package.json に次の npm スクリプトを追加して、テストを実行することができます。

"scripts": {
    "start:local": "npx @fluidframework/azure-local-service@latest > local-service.log 2>&1",
    "test:mocha": "mocha",
    "test:azure": "cross-env process.env.FLUID_CLIENT='\"azure\"' && npm run test:mocha",
    "test:local": "start-server-and-test start:local 7070 test:mocha"
}

上記のスクリプトで必要とされる依存関係をインストールするには、次のコマンドを使用できます。

npm install cross-env start-server-and-test mocha

test:local スクリプトでは、start-server-and-test ライブラリを使用して、ローカル サーバーを起動し、ポート 7070 (ローカル サーバーで使用される既定のポート) が応答するまで待って、テスト スクリプトを実行し、ローカル サーバーを終了させます。