Я обнаружил, что ни cy.request , ни Cypress. $. ajax не работали вообще с файлами.
Моя проблема была скрыта в двух вопросы:
- способ обработки файла перед отправкой;
- неправильный метод запроса собственного кипариса
Вот некоторые детали, которые необходимо принять во внимание:
- Возьмите файл, чтобы отправить его из локального:
before(() => { //run before the tests
cy.fixture(filePath, "binary")
- Подготовьте его как двоичный файл:
.then(Cypress.Blob.binaryStringToBlob)
.then(blob => {
const file = new File([blob], fileName);
- Включите его в отправку данных:
let data = new FormData();
//settings for host server
data.append("catalogName", fileName);
data.append("xlsxFile", file);
- Обход запроса, несмотря на cy.request nor Cypress. $. ajax:
cy.form_request(url, data)
.then(response => { some other code})
})
})
Поскольку Cypress. $. ajax был незаконно вызван, но в сети трудно найти источник проблемы. кипарис сбой при formData подготовка; Я обнаружил, что из раздела Network в Devtool не было никакого XHR-запроса, потому что он не был выполнен с самого начала.
Я нашел третий способ с помощью собственного обходного решения XHR , и в командах есть пользовательский запрос cy.form_reques . js:
Cypress.Commands.add("form_request", (url, formData) => {
return cy
.server()
.route("POST", url)
.as("formRequest")
.window()
.then(win => {
var xhr = new win.XMLHttpRequest();
xhr.open("POST", url);
xhr.send(formData);
})
.wait("@formRequest");
});