我是赛普拉斯的新手,我对done()回调有问题。这是我的功能:
it("Test ", function(user) {
const fileName = "test.png";
const fileType = "image/png";
const method = "POST";
const url =
"https://localhost/test";
let asset_uid = null;
let xhr_response = null;
// Get file from fixtures as binary
cy.fixture(fileName).then(image => {
// File in binary format gets converted to blob so it can be sent as Form data
Cypress.Blob.base64StringToBlob(image, fileType).then(blob => {
// Build up the form
let formData = new FormData();
formData.set("asset[file]", blob, fileName); //adding a file to the form
cy.log("Form data: " + formData.get("asset[file]"));
// Perform the request
cy.form_request(method, url, formData, function(response) {
expect(response.status).to.eq(200);
});
});
});
});
并且form_request命令是:
Cypress.Commands.add("form_request", (method, url, formData, done) => {
const xhr = new XMLHttpRequest();
cy.log("starting");
xhr.open(method, url);
xhr.setRequestHeader("Connection", "keep-alive");
xhr.setRequestHeader("Accept", "multipart/form-data");
xhr.setRequestHeader(
"Authorization",
"Token SddfdffdfdfHSuJjRksV",
);
xhr.setRequestHeader(
"User-Agent",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36",
);
xhr.setRequestHeader("Accept-Encoding", "gzip, deflate, br");
xhr.setRequestHeader(
"Accept-Language",
"en-GB,en-US;q=0.9,en;q=0.8,pl;q=0.7",
);
xhr.setRequestHeader("Sec-Fetch-Site", "same-site");
xhr.setRequestHeader("Sec-Fetch-Mode", "cors");
xhr.setRequestHeader(
"Referer",
"https:/localhost/test",
);
xhr.setRequestHeader("Content-Length", "11783");
xhr.setRequestHeader(
"Origin",
"https://localhost/test",
);
xhr.onload = function() {
cy.log('Onload');
done(xhr);
};
xhr.onerror = function() {
cy.log('Onerror');
done(xhr);
};
xhr.send(formData)
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
done(xhr);
}
};
});
当我运行此代码时:-断言运行两次(均通过)-我收到错误消息:Timed out after 20000ms. The done() callback was never invoked!
您知道为什么会发生吗?我尝试切换到.then()而不是回调,但是:(。非常感谢!
我在代码中发现一个导致此问题的错误。
it("Test ", function(user)
失败。我希望有人遇到同样的问题会有所帮助:)