Como: Utilizar a automatização de testes com relé de fluido Azure

Os testes e automação são cruciais para manter a qualidade e longevidade do seu código. Internamente, o Fluid utiliza uma gama de testes de unidade e integração alimentados por Mocha, Jest, Puppeteer e Webpack.

Pode fazer testes utilizando o serviço local de @fluidframework/azure-local ou utilizando um inquilino de teste no serviço Azure Fluid Relay. O AzureClient pode ser configurado para ligar a um serviço remoto e a um serviço local, o que lhe permite utilizar um único tipo de cliente entre testes contra casos de serviço ao vivo e locais. A única diferença é a configuração usada para criar o cliente.

Automação contra Relé de Fluido Azure

A sua automatização pode ligar-se a um inquilino de teste para o Azure Fluid Relay da mesma forma que um inquilino de produção e só precisa da configuração de ligação adequada. Ver Como: Ligar-se a um serviço de Retransmissão de fluidos Azure para mais detalhes.

Criar um cliente de teste adaptável

Para criar um cliente de teste adaptável, é necessário configurar o AzureClient de forma diferente, dependendo do alvo de serviço. A função abaixo usa uma variável ambiental para determinar isto. Pode definir a variável ambiente num script de teste para controlar qual o serviço que é alvo.

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

Os seus testes podem chamar esta função para criar um objeto AzureClient sem se preocupar com o serviço subjacente. O teste Mocha abaixo cria o cliente de serviço antes de realizar quaisquer testes e, em seguida, usa-o para executar cada teste. Existe um único teste que utiliza o cliente de serviço para criar um recipiente que passa desde que não sejam lançados erros.

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

Testes de execução

Pode adicionar os seguintes scripts npm no pacote.json do seu projeto para realizar testes:

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

Para instalar as dependências exigidas pelos scripts acima, pode utilizar o seguinte comando:

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

O test:local script utiliza a biblioteca de servidor e teste de início para iniciar o servidor local, aguarde até que a porta 7070 (a porta predefinida utilizada pelo servidor local) responda, execute o script de teste e, em seguida, termine o servidor local.