javascript 从一个迭代块到另一个迭代块的Cypress进位状态

fkvaft9z  于 2023-10-14  发布在  Java
关注(0)|答案(2)|浏览(108)

我正在使用cypress,无法找到一种方法将当前状态带到spec文件中的另一个迭代中,并且我有多个spec文件。
例如:
我打开一个员工列表,然后点击添加员工按钮。一个弹出的形式打开,我刚刚创建了一个工作人员和形式关闭与成功烤面包机,我回到了工作人员名单。迭代脚本以它结束,在下一次迭代中,我想搜索我创建的人员,但我面临的问题是,我必须给予他cy.visit()命令,让他带我回到那个人员列表。
我找不到解决办法,有点卡住了。

8iwquhpp

8iwquhpp1#

软件包cypress-data-session看起来很合适。
它允许您明确从一个测试传递到另一个测试的数据,同时保持测试隔离的完整性。
范例:

beforeEach(() => {
  // let's say you want to set up the value "A"
  cy.dataSession(
    'A', // data name
    () => 'a', // data creation commands
    (x) => x === 'a', // data validation function
  )
})

it('has object A', () => {
  expect(Cypress.getDataSession('A')).to.equal('a')
})
fcg9iug3

fcg9iug32#

在Cypress中,不独立于其他测试的测试并不被认为是最佳实践(我认为,几乎所有其他测试工具都是如此)。This Cypress blog post给出了一些很好的理由,说明为什么它是最佳实践,以及Cypress core-concept documentation.
相反,我建议创建一个函数,它可以在不使用UI的情况下创建工作人员。

// This is just a pseudo example
describe('My tests', () => {
  beforeEach(() => {
    cy.visit('/foo');
  });

  it('validates users can create staff members', () => {
    // code to validate user can create staff members via UI
  });

  it('validates created staff members appear on the webpage', () => {
    cy.createStaffMember(); // custom helper function you've written to create the staff member 
    // the ideal scenario would be that the above helper function does not use the UI
    
    // remaining portion of the test that validates staff member appears on the webpage 
  });
});
  • 为什么第二个测试要创建自己的测试数据?* 有几个原因,但对我来说最引人注目的是,如果测试1失败,测试2也会失败。如果测试1无法创建数据,那么很明显,测试2也会失败。对于任何依赖于测试的测试,您都会遇到级联失败,而原因并不总是显而易见的。如果测试1和2是独立的,那么调试失败的时候会更容易。
  • 但是 *,如果出于任何原因,测试1和2彼此隔离不可行/不合理/不可能,您可以禁用测试隔离。另一种方法是将合并测试1和2组合成一个单一的测试(虽然比另一种方法原子性更小,但似乎仍然是比禁用测试隔离更好的解决方案)。

相关问题