赛普拉斯制作的所有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();
});
答案 0 :(得分:0)
此问题现已解决。造成此问题的原因有两个,都在应用程序层。
问题#1-对于任何未处理的事件,我们都选择417作为错误代码。 修复-我们现在对无法处理的实体使用422错误代码
问题#2-formData追加方法具有三个参数-(名称,值,文件名),其中文件名是可选的。最近在应用程序代码中将其强制性化。 解决-
skipsrows