如何在不同的测试中访问别名?



我在1个测试中定义了一个别名,我想在另一个测试中使用结果:

it('fills in the login form', () => {
cy.intercept({
method: 'POST',
url: `${Cypress.env('apiURL')}/api/v1/user/login`,
}).as('login');
cy.get('[data-cy="inputEmailAddress"]').type(company.users[0].email);
cy.get('[data-cy="inputPassword"]').type(company.users[0].password);
cy.get('[data-cy="buttonLogin"]').click();
});
it('does stuff', () => {
cy.get('@login')
.its('response')
.then((res) => {
expect(res.statusCode).to.eq(200);
});
});

但是我得到一个错误:

cy.get()找不到注册别名:@login。您还没有别名。

关于如何在不同的测试中使用别名有什么建议吗?

您不能跨测试使用别名,Cypress会清除它们以保持状态干净。

然而这只是javascript -闭包变量可以使用

let login;
it('fills in the login form', () => {
cy.intercept(...)
.then(interception => login = interception);
... 
});
it('does stuff', () => {
cy.wrap(login)
.its('response')
.then((res) => {
expect(res.statusCode).to.eq(200);
});
});
共享上下文

此外,.as('login')命令集是Mocha上下文中的一个变量(与别名相同),在测试之间未被清除.

it('fills in the login form', () => {
cy.intercept(...)
.as('login');
... 
});
it('does stuff', function() {    // function syntax to access "this" scope
cy.wrap(this.login)          // access persistent scoped variable
.its('response')
.then((res) => {
expect(res.statusCode).to.eq(200);
});
});

From the Cypress Docs

Mocha在所有适用的钩子上自动为我们共享上下文对于每个测试。此外,这些别名和属性是每次测试后自动清理。

所以基本上在每个测试结束时,柏树清除所有别名。因此,为了使上面的代码工作,您必须将intercept方法移动到beforeEach()。比如:

describe('Test Suite', () => {
beforeEach(() => {
cy.intercept({
method: 'POST',
url: `${Cypress.env('apiURL')}/api/v1/user/login`,
}).as('login')
})
it('fills in the login form', () => {
cy.get('[data-cy="inputEmailAddress"]').type(company.users[0].email)
cy.get('[data-cy="inputPassword"]').type(company.users[0].password)
cy.get('[data-cy="buttonLogin"]').click()
})
it('does stuff', () => {
cy.get('@login')
.its('response')
.then((res) => {
expect(res.statusCode).to.eq(200)
})
})
})

相关内容

  • 没有找到相关文章

最新更新