我的设置: 我正在cypress上进行一些动态测试,即获得了环境变量中一些名称的列表。测试数量取决于此列表中名称的数量。
我的目标: 我想做的是以这种方式操作包含列表的数组,如果它包含通过环境变量传递的单词“ ALL”,那么我想更改数组并添加使用API获得的所有名称呼叫。这使我可以选择获取所有名称,而不是手动一个个地写它们。
我的问题: 尽管beforeEach()在测试之前运行,但数组中包含的值仍然与通过环境变量获取的值相同。我假设 describe()中但在 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)
})
})
})
我们将不胜感激。
答案 0 :(得分:0)
问题::您试图通过同步循环遍历在it
钩中异步填充的数组来动态生成beforeEach
测试用例-即使代码在该钩子内是是同步的(不是),该钩子本身在您生成以下it
测试之后的之后运行。
解决方案: AFAIK,除了同步并在任何钩子之外填充dataPoolsArray
数组,别无其他方法-因为Mocha(和Cypress)需要套件({{1 }}和测试用例(describe
)进行同步注册。
话虽如此,您可以在运行cypress之前或通过预处理测试文件本身somehow来生成整个测试文件。