Verwenden der Testautomatisierung mit Azure Fluid Relay

Tests und Automatisierung sind entscheidend für die Qualität und Langlebigkeit Ihres Codes. Intern verwendet Fluid eine Reihe von Komponenten- und Integrationstests, die von Mocha, Jest, Puppeteer und Webpack unterstützt werden.

Sie können Tests mit dem lokalen Dienst @fluidframework/azure-local-service oder mithilfe eines Testmandanten im Azure Fluid Relay-Dienst ausführen. AzureClient kann so konfiguriert werden, dass sowohl eine Verbindung mit einem Remotedienst als auch mit einem lokalen Dienst hergestellt wird, wodurch Sie einen einzelnen Clienttyp zwischen Tests für Live- und lokale Dienstinstanzen verwenden können. Der einzige Unterschied besteht in der Konfiguration, die zum Erstellen des Clients verwendet wird.

Automatisierung für Azure Fluid Relay

Ihre Automatisierung kann auf die gleiche Weise wie ein Produktionsmandant eine Verbindung mit einem Testmandanten für Azure Fluid Relay herstellen und benötigt nur die entsprechende Verbindungskonfiguration. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit einem Azure Fluid Relay-Dienst.

Erstellen eines anpassbaren Testclients

Um einen anpassbaren Testclient zu erstellen, müssen Sie AzureClient je nach Dienstziel unterschiedlich konfigurieren. Die folgende Funktion verwendet eine Umgebungsvariable, um dies zu bestimmen. Sie können die Umgebungsvariable in einem Testskript festlegen, um zu steuern, welcher Dienst als Ziel verwendet wird.

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);
}

Ihre Tests können diese Funktion aufrufen, um ein AzureClient-Objekt zu erstellen, ohne sich um den zugrunde liegenden Dienst zu kümmern. Der folgende Mocha-Test erstellt den Dienstclient vor dem Ausführen von Tests und verwendet ihn dann zum Ausführen der einzelnen Tests. Es gibt einen einzelnen Test, der den Dienstclient verwendet, um einen Container zu erstellen, der erfolgreich ist, solange keine Fehler ausgelöst werden.

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);
    });
});

Ausführen von Tests

Sie können die folgenden npm-Skripts in der Datei „package.json“ Ihres Projekts hinzufügen, um Tests auszuführen:

"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"
}

Zum Installieren der Abhängigkeiten, die für die obigen Skripts erforderlich sind, können Sie den folgenden Befehl verwenden:

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

Das test:local-Skript verwendet die Bibliothek start-server-and-test, um den lokalen Server zu starten, zu warten, bis Port 7070 (der vom lokalen Server verwendete Standardport) antwortet, das Testskript auszuführen und dann den lokalen Server zu beenden.