Практическое руководство. Автоматизация тестирования с помощью Azure Fluid Relay

Тестирование и автоматизация важны для поддержания качества и долголетия кода. Внутри компании Fluid используется ряд модульных и интеграции тестов, на основе Mocha, Jest, Puppeteer и Webpack.

Вы можете выполнять тесты с помощью локальной @fluidframework/azure-local-service или с помощью тестового клиента в службе Azure Fluid Relay. AzureClient можно настроить для подключения как к удаленной службе, так и к локальной службе, что позволяет использовать один тип клиента между тестами для динамических и локальных экземпляров служб. Единственное различие заключается в конфигурации, используемой для создания клиента.

Автоматизация с ретранслятором Жидкости Azure

Автоматизация может подключаться к тестовом клиенту для Ретранслятора Azure так же, как и рабочему клиенту, и требуется только соответствующая конфигурация подключения. Дополнительные сведения см. в статье How to: Подключение to a Azure Fluid Relay service.

Создание адаптируемого тестового клиента

Чтобы создать адаптируемый тестовый клиент, необходимо настроить 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 создает клиент службы перед выполнением любых тестов, а затем использует его для выполнения каждого теста. Существует один тест, использующий клиент службы для создания контейнера, который проходит до тех пор, пока не возникают ошибки.

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

Выполнение тестов

Чтобы выполнить тесты, можно добавить следующие скрипты npm в package.json проекта:

"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 (порт по умолчанию, используемый локальным сервером), запустите тестовый скрипт и завершите работу локального сервера.