有没有办法通过 Cypress 中的变量检索 JSON 数据?

问题描述 投票:0回答:1

在JS中,如果我想通过自己的变量检索JSON中的数据,我可以使用

obj[id]
,如下所示。

// In JS
const id = 'name'
const obj = {
    name: 'John',
    age: 5
}
console.log(obj['name']); --> OUTPUT: 'John'
console.log(obj[id]); --> OUTPUT: 'John'

我在Cypress中使用灯具时尝试过这种方式,但它不能按预期工作。但是,如果我创建一个新变量并为其分配特定值,Cypress 就会起作用。

**/fixtures/testData.json**

{
    "name": "John",
    "age": "5"
}
**/integration/testData.spec.cy.js**

describe('Test data retrieved from JSON file', () => {
    let testData;
    let id = ''
    beforeEach(() => {
        cy.fixture('testData.json').then(data => {
            testData = data
        })
    })
    it('Verify user is redirected to corresponding detail page',  () => {
         caseList.getTableBodyRecords()
            .then($case => {
                const items = $case.toArray()
                return Cypress._.sample(items)
            })
            .then($selectedCase => {
                const idHeading = 'ID'
                const idElement = $selectedCase.find('td:first-child').text()
                id = idElement.slice(idHeading.length)
            })
            .click()
    it('Verify test data', () => {
        const tempId = 'name'
        cy.log(testData.name) --> OUTPUT: 'John'
        // Assume that I have written a function and it returned a string **'name'** stored in variable naming **key**
        cy.log(id) --> OUTPUT: 'name'
        cy.log(testData[id]) --> OUTPUT: undefined
        cy.log(testData[tempId]) --> OUTPUT: 'John'
    })
}

我已经通过 cy.log(id) 记录了我自己的变量(例如 id)并确保其返回值是正确的,但不知何故结果并不符合我的预期。所以我的问题是,有没有办法通过 Cypress 中的变量检索 JSON 数据? 非常感谢!

javascript json automated-tests cypress
1个回答
0
投票

cy.log
打印的值取决于 Cypress 创建命令链时传递到
cy.log()
的变量值。 Gleb 解释说:

当调用 cy.log(username) 时,参数的值由变量 username 给出。 JavaScript 查找当前值,发现 null,然后调用 cy.log(null)。这是 JavaScript 语义 - 它与 Cypress 的逻辑无关。

我的猜测是,您让我们假设分配值的函数在Cypress创建命令链之后运行,这意味着在函数期间分配的所有值都不会被cy.log()

函数捕获。将该变量赋值函数移动到包含您的 
cy.then()
 函数的另一个 
cy.then()
 之前的 
cy.log()
 应该可以解决此问题。

it('Verify test data', () => { let tempId; cy.then(() => { tempId = 'name'; // Assume that I have written a function and it returned a string **'name'** stored in variable naming **key** }).then(() => { cy.log(testData.name) cy.log(id) cy.log(testData[id]) cy.log(testData[tempId]) });
    
© www.soinside.com 2019 - 2024. All rights reserved.