Я новичок в Cypress, и у меня есть проблема с асинхронными функциями и запросами Cypress, я не могу получить ответ от запроса xhr, чтобы иметь возможность использовать его далее в коде.
Вот моя функция:
it("Test ", function() {
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);
// alert(response.response);
//alert(xhr_response);
})
})
}).then(xhr_response =>{
cy.log('Response ' + xhr_response);
openHomepage();
})
});
});
И команда 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);
return xhr.responseText;
});
Когда я запускаю этот код: Утверждение выполнено в конце.
xhr_response = null
У вас есть идеи, почему это происходит? Как я могу изменить код, чтобы получить ответ, чтобы после подтверждения что-то выполнялось? Должен ли я использовать .then ()?