在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 数据? 非常感谢!
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])
});