我在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)
})
})
})