赛普拉斯 - 从一个测试中设置全局变量以用于其他测试

Cypress - Setting global variable from one test to use in other tests

我正在尝试设置一个变量,该变量将包含 URL(一个 UUID)的一部分,然后我想在单独的测试套件中使用它。 URL 的这个片段每次都会不同,所以我无法在“env”选项中的 cypress.json 中设置它。代码如下-

  cy.location().then(fullUrl => {
    let pathName = fullUrl.pathname
    let arr = pathName.split('/');
    const teamsTeamID = arr[4]
    cy.log(teamsTeamID)
  })

然后我想在单独的拆解测试中使用 teamsTeamID 在每次测试结束时删除团队 运行 但每次 运行 测试时团队 ID 都会不同 -有办法吗?

您可以使用 fixtures and then use readFile and writeFile 来实现。

首先在 fixtures 文件夹中创建一个 json urldata.json

{
  "uuid": "17289-YEHBE-893"
}

然后在你的测试中你可以这样写:

var teamsTeamID;

cy.location().then(fullUrl => {
  let pathName = fullUrl.pathname
  let arr = pathName.split('/');
  teamsTeamID = arr[4]
  cy.log(teamsTeamID)
})

cy.readFile("cypress/fixtures/urldata.json", (err, data) => {
  if (err) {
    return console.error(err);
  };
}).then((data) => {
  data.uuid = teamsTeamID
  cy.writeFile("cypress/fixtures/urldata.json", JSON.stringify(data))
})

所以现在每次 运行 测试时,您的 json 文件中都会有不同的 UUID 值。接下来,您可以将来自 fixtures 的值直接用于其他测试:

describe('Some page', () => {
  beforeEach(function () {
    // "this" points at the test context object
    cy.fixture('urldata.json').then((urldata) => {
      // "this" is still the test context object
      this.urldata = urldata
    })
  })

  // the test callback is in "function () { ... }" form
  it('check uuid', function () {
    // this.urldata exists
    expect(this.urldata.uuid).to.equal('some uuid')
  })
})

注意事项:

If you store and access the fixture data using this test context object, make sure to use function () { ... } callbacks. Otherwise the test engine will NOT have this pointing at the test context.