通过XHR上载文件进行cypress多种形式测试>从未调用过回调

问题描述 投票:0回答:1

我是赛普拉斯的新手,我对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!enter image description here

您知道为什么会发生吗?我尝试切换到.then()而不是回调,但是:(。非常感谢!

javascript post xmlhttprequest cypress form-data
1个回答
0
投票

我在代码中发现一个导致此问题的错误。

it("Test  ", function(user)

失败。我希望有人遇到同样的问题会有所帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.