Даже после изменения значения в крючке beforeEach исходное значение используется для динамических тестов. - PullRequest
0 голосов
/ 08 февраля 2019

Моя настройка: Я запускаю несколько динамических тестов на кипарисе, то есть получаю список некоторых имен в переменных окружения.Количество тестов зависит от количества имен в этом списке.

Моя цель: Что я хочу сделать, так это манипулировать этим массивом, который содержит список таким образом, что если онсодержит слово «ALL», переданное через переменную окружения, затем я хочу изменить массив и добавить все имена, которые я получаю с помощью вызова API.Это дает мне возможность получать все имена вместо того, чтобы записывать их одно за другим вручную.

Моя проблема: Хотя beforeEach () запускается до проверки, значение, содержащееся в моем массиве, остается прежнимчто я получил через мои переменные среды.Я предполагаю, что код в description () , но вне it () и beforeeach () выполняется первым ... однако даже после beforeEach () запускает и обновляет мой массив, при запуске тестов они все еще используют более старое значение, полученное из переменной среды.

Я хочу условно обновить мой массив в зависимости от того, что передано в переменную среды "ALL""или некоторые имена.

Мой код:

describe('[' + Cypress.env('TEAM') + ' - ' + Cypress.env('CLUSTER') + '] - ', () => {

    let dataPoolsArray: string[] = Cypress.env('DATAPOOLS').split(',') // this is being read directly from env variable

    beforeEach(() => {
        cy.defaultLogin()

        if ( Cypress.env('DATAPOOLS') === 'ALL') { // Depending on my env variable I want to change the value of the array here
            dataPoolsArray.length = 0
            let i = 0
            cy.Integration_DataPool_findAll().then((getDataPoolsResponse) => {
                getDataPoolsResponse.body
                .forEach((dataPool: any) => {
                    dataPoolsArray.push(dataPool.name) 
                    cy.log('dataPoolsArray:  ' + dataPoolsArray[i])
                    i ++
                })
            })

        }

    })



    dataPoolsArray.forEach((poolName) => { // However when I run my test it just takes "ALL" as the only value in the array

        it('Data Model for pool: ' + poolName, () => {
            cy.log('Checking if datamodel loaded for the pool: ' + poolName)
            cy.sendPqlQueryToAnalysisConnectedToPool(poolName)
        })

    })


})

Помощь будет высоко ценится.

1 Ответ

0 голосов
/ 08 февраля 2019

Проблема: вы пытаетесь динамически генерировать it тестовых случаев, синхронно циклически проходя по массиву, который асинхронно заполняется в хуке beforeEach - даже если код внутри этого хука было синхронно (что не так), сам хук запускается после вы генерируете it тесты ниже.

Решение: AFAIK, естьнет другого способа, кроме как заполнять массив dataPoolsArray синхронно и вне всякой ловушки - поскольку Mocha (и Cypress) требует, чтобы наборы (describe) и тестовые случаи (it) регистрировались синхронно.

С учетом вышесказанного вы, возможно, можете сгенерировать весь тестовый файл, либо до запуска Cypress, либо предварительно обработав сам тестовый файл, каким-то образом .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...