Cypress setCookie无法正常工作

问题描述 投票:0回答:1

我添加了一个命令getCSRFToken,其他命令使用该命令来获取CSRF令牌以向我的应用发出请求:

Cypress.Commands.add("getCSRFToken", () => {
  cy.getCookie('XSRF-TOKEN').then((cookie) => {
    if (!cookie) {
      return cy.request('HEAD', '/')
        .its('headers')
        .then((headers) => {
          const token = headers['x-xsrf-token'];
          if (!token) {
            throw new Error('XSRF token not found');
          }

          return cy.setCookie('XSRF-TOKEN', token)
            .then(() => token);
        });
    }

    return cookie.value;
  });
});

HEAD请求的部分是在测试中尚未访问任何页面时使用的,例如,在进行POST请求以创建测试数据时,此功能的使用。

[AFAICT,这看起来应该对我有用,但是随后对getCookie的调用似乎实际上没有检索到任何东西:

enter image description here

enter image description here

我以为返回setCookie承诺和getCookie承诺可能会有所作为,但事实并非如此。

cookies cypress
1个回答
0
投票

默认情况下,赛普拉斯会在每次运行测试之前清除所有cookie。他们有一个API可以为下一次测试执行保留cookie,该API为Cypress.Cookies.preserveOnce

回到您的用例,您可以在套件级别的beforeEach中调用Cypress.Cookies.preserveOnce('XSRF-TOKEN'),在每个要获取令牌的套件中。如果您不想重复通话,可以将其移至getCSRFToken命令中。

Cypress.Commands.add("getCSRFToken", () => {
  Cypress.Cookies.preserveOnce('XSRF-TOKEN')
  cy.getCookie('XSRF-TOKEN').then((cookie) => {
    .....
  });
});
© www.soinside.com 2019 - 2024. All rights reserved.