Cypress visit () завершается ошибкой: TypeError: Недопустимый символ в содержимом заголовка ["cook ie"] - PullRequest
0 голосов
/ 12 февраля 2020

Я понимаю, что причиной ошибки является недопустимый символ внутри повара ie, но в моем случае я предпочитаю найти обходной путь без исправления способа сохранения файлов cookie. Трассировка стека ошибок:

TypeError [ERR_INVALID_CHAR] [ERR_INVALID_CHAR]: Invalid character in header content ["cookie"]
    at ClientRequest.setHeader (_http_outgoing.js:467:3)
    at new ClientRequest (_http_client.js:222:14)
    at Object.request (https.js:309:10)
    at Request.start (C:\Users\{user}\AppData\Local\Cypress\Cache\4.0.0\Cypress\resources\app\packages\server\node_modules\request\request.js:751:32)
    at Request.end (C:\Users\{user}\AppData\Local\Cypress\Cache\4.0.0\Cypress\resources\app\packages\server\node_modules\request\request.js:1507:10)
    at end (C:\Users\{user}\AppData\Local\Cypress\Cache\4.0.0\Cypress\resources\app\packages\server\node_modules\request\request.js:564:14)
    at Immediate._onImmediate (C:\Users\{user}\AppData\Local\Cypress\Cache\4.0.0\Cypress\resources\app\packages\server\node_modules\request\request.js:578:7)
    at processImmediate (internal/timers.js:439:21)

1 Ответ

0 голосов
/ 12 февраля 2020

Правильный способ исправить ошибку - избежать использования файлов cookie, когда они сохраняются приложением. Но если по какой-то причине вы не можете исправить код приложения, возможно, в качестве обходного пути можно использовать команду override visit() и избежать неправильных файлов cookie в конце каждого запроса:

Cypress.Commands.overwrite('visit', (originalFn, ...args) => {
  const [ url, options ] = (() => {
    if (typeof args[0] === 'object') {
      const { url, ...options } = args[0];
      return [ url, options ];
    } else {
      return args;
    }
  })();

  if (options && options.__original) {
    return originalFn(url, options);
  } else {
    escapeCookie("firstInvalidCookie");
    escapeCookie("secondInvalidCookie");

    return cy.visit(url, {
      ...options,
      __original: true
    });
  }
});

function escapeCookie(name) {
  return cy.getCookie(name, { log: false }).then(cookie => {
    cy.clearCookie(name, { log: false });

    if (cookie) {
      cy.setCookie(name, encodeURIComponent(cookie.value), {
        domain: 'my.domain.com',
        log: false
      });
    }
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...