Cypress cy.wrap()-传递字符串或对象之间的区别
在使用Cypress一段时间后,我注意到cy.wrap()有一个奇怪的行为。虽然在钩子之前将字符串包装在内部,但该字符串在所有进一步的测试中都是可用的,但该对象只在第一次测试中可用,而在其余测试中产生未定义的结果 我尝试过使用context()包装测试,虽然有效,但不必要地阻塞了cypress测试树UI 没有上下文:Cypress cy.wrap()-传递字符串或对象之间的区别,cypress,Cypress,在使用Cypress一段时间后,我注意到cy.wrap()有一个奇怪的行为。虽然在钩子之前将字符串包装在内部,但该字符串在所有进一步的测试中都是可用的,但该对象只在第一次测试中可用,而在其余测试中产生未定义的结果 我尝试过使用context()包装测试,虽然有效,但不必要地阻塞了cypress测试树UI 没有上下文: describe('Wrap test', function () { before(function () { console.log('Before');
describe('Wrap test', function () {
before(function () {
console.log('Before');
cy.wrap('string').as('string');
cy.wrap({ object: true }).as('object');
});
it('Test 1', function () {
console.log('Test 1');
console.log(this.string); // 'string'
console.log(this.object); // { object: true }
});
it('Test 2', function () {
console.log('Test 2');
console.log(this.string); // 'string'
console.log(this.object); // undefined
});
});
结合上下文:
describe('Wrap test', function () {
before(function () {
console.log('Before');
cy.wrap('string').as('string');
cy.wrap({ object: true }).as('object');
});
context('Context', function () {
it('Test 1', function () {
console.log('Test 1');
console.log(this.string); // 'string'
console.log(this.object); // { object: true }
});
it('Test 2', function () {
console.log('Test 2');
console.log(this.string); // 'string'
console.log(this.object); // { object: true }
});
})
});
我想在hook之前模拟一个对象,然后在一些测试中使用它。我考虑将该对象转换为JSON格式,因为它可以用于所有测试。期待更多有经验的人对所呈现的场景发表意见。结果表明,在测试之间清除上下文实际上是Cypress的故意行为,如中所述 当您在另一个测试套件(
descripe
/context
)中包装您的单个测试用例时,如果上下文创建的级别高于此级别,则不会清除该套件的上下文(如您所见)——这也是有意的
但是,它只清除原语而不清除对象这一事实是一个bug,我为此创建了一个bug报告:。是的,这看起来像个bug-您应该创建一个bug。顺便说一句,
context
只是mocha对description
的别名(你可以试着用它替换它,看看第二个代码示例仍然可以工作)。此外,它与cy.wrap()
无关,而是与mocha的相关。也就是说,您可以用this.object={}
替换cy.wrap({}).as('object')
,并且在第二次测试中它也将是未定义的。但我已经测试了摩卡2.5.3(目前由cypress使用),但它没有表现出来。因此,这似乎是塞普拉斯的摩卡咖啡叉上的一只虫子。