令牌不会在赛普拉斯测试中持久存在
Token not being persisted across Cypress tests
我创建了一个 Cypress 命令来从我的 GQL API 中获取一个 JWT 令牌。然后,我将令牌设置为 cookie,以在需要身份验证的测试中使用。
这是我的登录命令:
export function login(username, password) {
const { apiUrl: url } = Cypress.env();
cy.request({
method: 'POST',
url,
body: {
operationName: 'signin',
headers: {
'content-type': 'application/json'
},
query:
`mutation signin($email: String!, $password: String!) {
signin(input: {email: $email, password: $password}) {
id
token
__typename
}
}`,
variables: { email: username, password: password }
}
})
.then(response => {
const { token } = response.body.data.signin;
cookie.set('token', token, { expires: 10000000 });
cy.wait(3000);
});
}
我可以看到当我 运行 login
命令时设置了 cookie,但是当我的测试试图访问我的应用程序中的页面时,cookie 消失了。
describe('Entity Page', () => {
before(() => {
const { username, password } = Cypress.env();
cy.login(username, password);
cy.addEntity(newEntityId, {});
cy.wait(3000);
cy.get('@entityId').then(entityId => {
cy.visit(`/entity/${entityId}`)
cy.wait(6000)
});
});
当我到达 addEntity
时,cookie 消失了,我未通过身份验证。我需要做些什么来保留 cookies 吗?我试过 Cypress.Cookies.preserveOnce
但这没有效果
我也尝试将以下内容添加到我的 support/index.js
但 cookie 仍然被删除。
Cypress.Cookies.defaults({
preserve: 'token'
})
尝试 cy.setCookie(name, value)
docs。
它有几个默认值可能会有所帮助。
- 域 - 默认为 window.location.hostname。 cookie 可见的域。
- 过期 - 默认为未来 20 年。指定为自 1970 年 1 月 1 日以来的秒数(10,000,000 仅是 115 天)。
我创建了一个 Cypress 命令来从我的 GQL API 中获取一个 JWT 令牌。然后,我将令牌设置为 cookie,以在需要身份验证的测试中使用。
这是我的登录命令:
export function login(username, password) {
const { apiUrl: url } = Cypress.env();
cy.request({
method: 'POST',
url,
body: {
operationName: 'signin',
headers: {
'content-type': 'application/json'
},
query:
`mutation signin($email: String!, $password: String!) {
signin(input: {email: $email, password: $password}) {
id
token
__typename
}
}`,
variables: { email: username, password: password }
}
})
.then(response => {
const { token } = response.body.data.signin;
cookie.set('token', token, { expires: 10000000 });
cy.wait(3000);
});
}
我可以看到当我 运行 login
命令时设置了 cookie,但是当我的测试试图访问我的应用程序中的页面时,cookie 消失了。
describe('Entity Page', () => {
before(() => {
const { username, password } = Cypress.env();
cy.login(username, password);
cy.addEntity(newEntityId, {});
cy.wait(3000);
cy.get('@entityId').then(entityId => {
cy.visit(`/entity/${entityId}`)
cy.wait(6000)
});
});
当我到达 addEntity
时,cookie 消失了,我未通过身份验证。我需要做些什么来保留 cookies 吗?我试过 Cypress.Cookies.preserveOnce
但这没有效果
我也尝试将以下内容添加到我的 support/index.js
但 cookie 仍然被删除。
Cypress.Cookies.defaults({
preserve: 'token'
})
尝试 cy.setCookie(name, value)
docs。
它有几个默认值可能会有所帮助。
- 域 - 默认为 window.location.hostname。 cookie 可见的域。
- 过期 - 默认为未来 20 年。指定为自 1970 年 1 月 1 日以来的秒数(10,000,000 仅是 115 天)。