赛普拉斯已开始在所有POST和PUT XMLHttpRequest上引发417 Expectation Failed错误

时间:2019-03-22 07:01:17

标签: http cypress

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

过去,我所有的代码都能正常运行,没有任何问题。

我在Internet上了解到此错误,但不确定在测试中的应用程序,某些防火墙策略上是否存在此问题,或者赛普拉斯中是否有某些设置可以解决此问题。

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();
  });

1 个答案:

答案 0 :(得分:0)

此问题现已解决。造成此问题的原因有两个,都在应用程序层。

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

问题#2-formData追加方法具有三个参数-(名称,值,文件名),其中文件名是可选的。最近在应用程序代码中将其强制性化。 解决-

skipsrows