赛普拉斯两次测试之间通过状态的最佳实践是什么

时间:2018-08-28 05:25:34

标签: cypress

我想在每个测试之间传递/共享数据。在赛普拉斯中实现它的最佳方法是什么?

例如:

 it('test 1'), () => {
   cy.wrap('one').as('a')
   const state1 = 'stat1'
 })

 it('test 2'), () => {
   cy.wrap('two').as('b')
 })

 it('test 2'), () => {
   //I want to access this.a and this.b

   //Also I want to access state1

 })

4 个答案:

答案 0 :(得分:0)

对于Javascript变量,您可以执行以下操作:

let state;

describe('test 1', () => {
    it('changes state', () => {
        state = "hi";
     });
});

describe('test 2', () => {
    it('reports state', () => {
        cy.log(state); // logs "hi" to the Cypress log panel
     });
});

.as()在两次测试之间似乎无法携带。

答案 1 :(得分:0)

假设您正在尝试传递文本

it('test 1'), () => {
  cy.wrap('one').as('a')
}

it('test 2'), () => {
  cy.wrap({ valueName: 'two' }).as('b')
}

it('test 2'), () => {
  //I want to access this.a and this.b
  cy.get('@a').then((thisIsA) => {
    cy.log(thisIsA);
    // logs 'one'
  }

  cy.get('@b').its('valueName').then((thisIsB) => {
    cy.log(thisIsB);
    // logs 'two'
  }

  cy.get('@b').its('valueName').should('eq', 'two')
}

答案 2 :(得分:0)

我尝试了其他一些解决方案,但它们对我不起作用。也许事情随着最新版本而改变了。下面的示例应该起作用。请注意,两个测试都使用function(),这使事情保持在“ this”的上下文中。

  it('get the value', function () {
    cy.get('#MyElement').invoke('text').as('mytext1')
  })

  it('use the value', function () {
    cy.log(this.mytext1);
  })

答案 3 :(得分:0)

正如 abbr 在评论中指出的那样,如果测试在不同的 url 上开始,则使用全局变量共享值将不起作用。

所以这些都不起作用:

  • 全局变量赋值和读取(不管它是否在 describe / context 块之外)
  • 依赖于Mocha this.state(测试后会清除)
  • 使用 Cypress as

剩下的当然是文件。 Readwrite


describe("Test", () => {

  it("Can access 3000", function () {
    cy.visit("http://localhost:3000");

    cy.writeFile("shared.json", {count: 2})
  });


  it("Can access 8000", function () {
    cy.visit("http://localhost:8000");

    cy.readFile("shared.json").then(cy.log)
  });

});