Загрузить файл через XHR Запрос на тестирование кипарисовой формы> Я не могу получить ответ для использования в дальнейшем коде - PullRequest
0 голосов
/ 17 апреля 2020

Я новичок в 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 ()?

...