令牌不会在赛普拉斯测试中持久存在

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 天)。