Javascript 传递变量';在Cypress中从一个测试到下一个测试的s值

Javascript 传递变量';在Cypress中从一个测试到下一个测试的s值,javascript,node.js,testing,automation,cypress,Javascript,Node.js,Testing,Automation,Cypress,是否可以将变量从一个it测试传递到下一个it测试?使用cy.wrap执行以下操作无效: it('test1',()=>{ const var1='test' cy.wrap(var1.as('var1Alias')) }) 它('test2',()=>{ cy.get('@var1Alias')。然后(var1Alias=>{ //和瓦拉利亚斯一起干吧 }) }) 我检查了与我类似的旧stackoverflow问题,如:不同之处在于变量在测试之外全局声明(it)。因此,始终可以替换变量 我的具

是否可以将变量从一个
it
测试传递到下一个
it
测试?使用
cy.wrap
执行以下操作无效:

it('test1',()=>{
const var1='test'
cy.wrap(var1.as('var1Alias'))
})
它('test2',()=>{
cy.get('@var1Alias')。然后(var1Alias=>{
//和瓦拉利亚斯一起干吧
})
})
我检查了与我类似的旧stackoverflow问题,如:不同之处在于变量在测试之外全局声明(
it
)。因此,始终可以替换变量

我的具体问题是依赖于上一次测试中变量的值。我知道Cypress最佳实践建议测试不应该是顺序的,但在我看来,这是以可读的方式正确分类测试的常见场景

对于上下文,我的第一个测试是调用POST端点,然后在后续测试中将响应主体作为GET端点的查询参数传递

当前的解决方法(我仍在寻找更好的选择):

  • 使用fixture并写入然后检索(较慢的运行时)
  • 使用localstorage命令插件(我有多个变量要检索)
  • 将后续测试包括在前一测试的箭头功能中(因此将两个测试组合在一个测试中)
如果您的it()测试共享同一个域,您应该使用传统的函数声明“function(){do smth}”,这样您就可以使用它了。上下文,就在descripe()之后,定义不带值的let变量。之后,在测试“it()”中的.then()中,您可以像这样重新定义变量值。str=value;此值将被保存,并可传递给其他it()

例如:

describe('test', function() {
  let str;
  it('take value from input', () => {
    cy.visit('/');

    cy.contains('Forms').click();
    cy.contains('Form Layouts').click();
    cy.contains('nb-card', 'Using the Grid').find('[data-cy="imputEmail1"]').type('someemil@email.com').invoke('val').then((value) => {
      this.str = value;
    });
  });

  it('put value', () => {
    cy.visit('/');
    cy.log(this.str);
  });
});

?选中此选项,但在此处的beforeach/before级别上完成换行/调用/别名。我尝试的是从一个测试(
it
)使用wrap或invoke,因为我需要将该变量传递到下一个测试(
it
)。如上所述,它不起作用。很抱歉,我复制了
cy.log
,只是为了查看是否拾取了该值。我已经更新了我原来的帖子。我也错过了别名被清除的声明,所以谢谢你。我不妨使用闭包变量并将测试分组在一起。最初的目的是将它们分开,以便在我生成的测试结果/报告上看起来整洁。因此,您可以替换变量-我在这里的意思是每次测试都可以更改变量(不依赖于每个测试),我真正想要的是在测试2中获取测试1的值。清除测试之间的所有内容是确保没有“出血”的一种方法从一个测试到另一个测试会导致误报——诚然,这种情况很少见,但可能会发生,Cypress采取了谨慎的态度。另外需要注意的是,如果测试是并行运行的(为了速度,就像Cypress Dashboard一样),那么它们可以以任何顺序运行,因此从一个测试传递到另一个测试是不起作用的。我想这就是为什么
before()
存在的原因——它保证在before()之前运行。