Cypress cy.wrap()-传递字符串或对象之间的区别

Cypress cy.wrap()-传递字符串或对象之间的区别,cypress,Cypress,在使用Cypress一段时间后,我注意到cy.wrap()有一个奇怪的行为。虽然在钩子之前将字符串包装在内部,但该字符串在所有进一步的测试中都是可用的,但该对象只在第一次测试中可用,而在其余测试中产生未定义的结果 我尝试过使用context()包装测试,虽然有效,但不必要地阻塞了cypress测试树UI 没有上下文: describe('Wrap test', function () { before(function () { console.log('Before');

在使用Cypress一段时间后,我注意到cy.wrap()有一个奇怪的行为。虽然在钩子之前将字符串包装在内部,但该字符串在所有进一步的测试中都是可用的,但该对象只在第一次测试中可用,而在其余测试中产生未定义的结果

我尝试过使用context()包装测试,虽然有效,但不必要地阻塞了cypress测试树UI

没有上下文:

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使用),但它没有表现出来。因此,这似乎是塞普拉斯的摩卡咖啡叉上的一只虫子。