JS Cypress:无法为数组使用别名
JS Cypress: unable to use alias for array
我对 Cypress 很陌生,我有一些 before()
调用命令通过 API 调用和 return 我在 after()
用于删除它们,但是如果我只 return 一个 ID 并存储在别名中,它会以某种方式完美地工作,但如果我将一组 ID 存储在别名中,它将失败,这是故意的还是我做错了什么。
在我的代码中:
before(() => {
cy.setupEnv()
.as('access_token')
.then((token) => cy.setupFlow(token).as('data_id'))
})
after(function () {
console.log(this.access_token)
console.log(this.data_id)
})
如果 setupFlow return 只有一个 ID,console.log(this.data_id)
显示正常,但如果我尝试 return [id1,id2,id3]
并使用 .as("data_id")
存储数组,则变得未定义
假设 cy.setupFlow(token)
生成类似于 [id1, id2, id3]
的值数组。即使数组中只有一个值,这也会起作用。每个人之后你应该看这个:
after(function () {
cy.get('@data_id').then((data_id) => {
//Get individual values
cy.log(data_id[0])
cy.log(data_id[1])
cy.log(data_id[2])
//Get all values using forEach
data_id.forEach((id) => {
cy.log(id) //get all values one by one
})
})
})
我为此创建了一个小型 POC,它正在运行,因为 expected.Below 是结果。
代码:
describe('SO Ques', () => {
before(function () {
cy.wrap([1, 2, 3]).as('array')
})
it('SO Ques', function () {
cy.log('Hello')
})
after(function () {
cy.get('@array').then((array) => {
cy.log(array[0])
cy.log(array[1])
cy.log(array[2])
})
})
})
结果:
您遇到了一个奇怪的问题,值得向 Cypress 提出。
只有当您 不止一次测试时才会发生这种情况。
例如,如果我 运行 以下它记录数组。
before(() => {
cy.wrap(1).as('access_token')
cy.then(() => {
return [1,2,3]
}).as('data_id')
})
after(function () {
console.log(this.access_token) // 1
console.log(this.data_id) // [1,2,3]
})
it('test1', () => {
console.log('test1')
expect(true).to.eq(true)
})
如果我添加一个测试,它会记录 undefined!
before(() => {
cy.wrap(1).as('access_token')
cy.then(() => {
return [1,2,3]
}).as('data_id')
})
after(function () {
console.log(this.access_token) // 1
console.log(this.data_id) // undefined
})
it('test1', () => {
console.log('test1')
expect(true).to.eq(true)
})
it('test2', () => {
console.log('test2')
expect(true).to.eq(true)
})
解决此问题的一种方法是使用 Cypress.env()
代替
before(() => {
cy.wrap(1).as('access_token')
cy.then(() => {
Cypress.env('data_id', [1,2,3])
return [1,2,3]
}).as('data_id')
console.log('before')
})
after(function () {
console.log(this.access_token) // 1
console.log(this.data_id) // undefined
console.log(Cypress.env('data_id')) // [1,2,3]
})
beforeEach(function() {
console.log(cy.state())
console.log(this.data_id)
cy.wrap(this.data_id).as('data_id')
})
it('test1', () => {
expect(true).to.eq(true)
console.log('test1')
})
it('test2', () => {
console.log('test2')
expect(true).to.eq(true)
})
我对 Cypress 很陌生,我有一些 before()
调用命令通过 API 调用和 return 我在 after()
用于删除它们,但是如果我只 return 一个 ID 并存储在别名中,它会以某种方式完美地工作,但如果我将一组 ID 存储在别名中,它将失败,这是故意的还是我做错了什么。
在我的代码中:
before(() => {
cy.setupEnv()
.as('access_token')
.then((token) => cy.setupFlow(token).as('data_id'))
})
after(function () {
console.log(this.access_token)
console.log(this.data_id)
})
如果 setupFlow return 只有一个 ID,console.log(this.data_id)
显示正常,但如果我尝试 return [id1,id2,id3]
并使用 .as("data_id")
假设 cy.setupFlow(token)
生成类似于 [id1, id2, id3]
的值数组。即使数组中只有一个值,这也会起作用。每个人之后你应该看这个:
after(function () {
cy.get('@data_id').then((data_id) => {
//Get individual values
cy.log(data_id[0])
cy.log(data_id[1])
cy.log(data_id[2])
//Get all values using forEach
data_id.forEach((id) => {
cy.log(id) //get all values one by one
})
})
})
我为此创建了一个小型 POC,它正在运行,因为 expected.Below 是结果。
代码:
describe('SO Ques', () => {
before(function () {
cy.wrap([1, 2, 3]).as('array')
})
it('SO Ques', function () {
cy.log('Hello')
})
after(function () {
cy.get('@array').then((array) => {
cy.log(array[0])
cy.log(array[1])
cy.log(array[2])
})
})
})
结果:
您遇到了一个奇怪的问题,值得向 Cypress 提出。
只有当您 不止一次测试时才会发生这种情况。
例如,如果我 运行 以下它记录数组。
before(() => {
cy.wrap(1).as('access_token')
cy.then(() => {
return [1,2,3]
}).as('data_id')
})
after(function () {
console.log(this.access_token) // 1
console.log(this.data_id) // [1,2,3]
})
it('test1', () => {
console.log('test1')
expect(true).to.eq(true)
})
如果我添加一个测试,它会记录 undefined!
before(() => {
cy.wrap(1).as('access_token')
cy.then(() => {
return [1,2,3]
}).as('data_id')
})
after(function () {
console.log(this.access_token) // 1
console.log(this.data_id) // undefined
})
it('test1', () => {
console.log('test1')
expect(true).to.eq(true)
})
it('test2', () => {
console.log('test2')
expect(true).to.eq(true)
})
解决此问题的一种方法是使用 Cypress.env()
代替
before(() => {
cy.wrap(1).as('access_token')
cy.then(() => {
Cypress.env('data_id', [1,2,3])
return [1,2,3]
}).as('data_id')
console.log('before')
})
after(function () {
console.log(this.access_token) // 1
console.log(this.data_id) // undefined
console.log(Cypress.env('data_id')) // [1,2,3]
})
beforeEach(function() {
console.log(cy.state())
console.log(this.data_id)
cy.wrap(this.data_id).as('data_id')
})
it('test1', () => {
expect(true).to.eq(true)
console.log('test1')
})
it('test2', () => {
console.log('test2')
expect(true).to.eq(true)
})