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

时间:2018-12-28 11:12:38

标签: cypress

在与Cypress短暂合作之后,我注意到cy.wrap()的行为异常。在将字符串包装在钩子之前之前,所说的字符串在所有其他测试中都可用,但对象仅在第一个测试中可用,而在其余测试中未定义。

我曾尝试使用context()包装测试,该方法虽然有效,但不必要地阻塞了赛普拉斯测试树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 }
    });
  })
});

我想在钩子之前模拟对象,然后在一些测试中使用它。我考虑过将所述对象转换为JSON格式,因为它将可用于所有测试。期待听到更多有经验的人对提出的方案的看法。

1 个答案:

答案 0 :(得分:0)

事实证明,两次测试之间的清除上下文实际上是赛普拉斯的故意行为,如docs here中所述。

当您将各个测试用例包装在另一个测试套件(describe / context)中时,如果创建了上下文,则不会清除该套件的上下文(如您所见)高于---这也是故意的。

尽管它只清除原始,而不清除对象,但这是一个错误,我为此创建了一个错误报告:{{3} }。