【问题标题】:Cypress has started throwing 417 Expectation Failed error on all POST and PUT XMLHttpRequest赛普拉斯已开始在所有 POST 和 PUT XMLHttpRequest 上抛出 417 Expectation Failed 错误
【发布时间】:2019-03-22 07:01:16
【问题描述】:

所有进入赛普拉斯的 POST 和 PUT XMLHttpRequest 最近都开始抛出 417 Expectation Failed。但是,当我手动浏览 Web 应用程序时,所有这些都可以在 Web 应用程序中运行。

我所有的代码过去都运行良好,没有任何问题。

我在互联网上了解到此错误,但我不确定此问题是否存在于被测应用程序、某些防火墙策略或赛普拉斯中的某些设置可以修复它。

Cypress.Commands.add("Post_Client", () => {
  cy.fixture(Cypress.env("ClientInputFile")).then(clientoBJ => {
    cy.fixture(clientoBJ.imagePath, "binary").then(imageBin => {
      Cypress.Blob.binaryStringToBlob(imageBin, clientoBJ.imageType).then(
        blob => {
          const xhr = new XMLHttpRequest();
          const data = new FormData();
          data.set(clientoBJ.nameatr, clientoBJ.nameVal);
          data.set(clientoBJ.imageatr, blob);
          xhr.open(
            "POST",
            Cypress.env("APIBaseURL") + Cypress.env("ClientPostURL"),
            false
          );
          xhr.setRequestHeader("accept", "application/json");
          xhr.setRequestHeader("access-token", accesstoken);
          xhr.setRequestHeader("client", client);
          xhr.setRequestHeader("expiry", expiry);
          xhr.setRequestHeader("token-type", tokentype);
          xhr.setRequestHeader("uid", uid);
          xhr.onload = function() {
            if (this.status === 201) {
              cy.writeFile(
                Cypress.env("ClientOutputFile"),
                JSON.parse(this.responseText)
              );
              cy.readFile(Cypress.env("IDStore")).then(obj => {
                obj.clientID = JSON.parse(this.responseText).client.id;
                cy.writeFile(Cypress.env("IDStore"), obj);
              });
            }
          };
          xhr.send(data);
        }
      );
    });
  });
});

然后在测试中调用它

  it.only("CLIENT API POST TEST", () => {
    cy.Post_Client();
  });

【问题讨论】:

  • 您可以通过 Postman/任何 ReST 客户端尝试相同的请求,看看是否可以重现?我们会知道是应用程序问题还是赛普拉斯问题。
  • 这些请求在 POSTMAN 和 App UI 中运行良好。当我从赛普拉斯执行此操作时,问题浮出水面。这非常令人困惑,因为这适用于某些 API 而不适用于其他 API。

标签: http cypress


【解决方案1】:

这个问题现在已经解决了。有两个问题导致了这个问题,并且都在应用程序层。

问题#1 - 我们选择了 417 作为任何未处理事件的错误代码。 修复 - 我们现在对不可处理的实体使用 422 错误代码

问题#2 - formData 追加方法有三个参数 -(name, value, filename),其中 filename 是可选的。最近在应用程序代码中强制要求它。 修复 -

data.set(
            clientoBJ.imageatr,
            blob,
            clientoBJ.imagePath.substring(
              clientoBJ.imagePath.lastIndexOf("//") + 2
            )
          );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-26
    • 2019-11-07
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 2022-06-29
    • 2021-07-07
    相关资源
    最近更新 更多