Cypress - невозможно сохранить данные response.body в файл JSON - PullRequest
0 голосов
/ 05 марта 2019

Я успешно создал POST XMLHttpRequest с FormData.Теперь мне нужно захватить тело ответа и сохранить его в файле JSON.

Cypress.Commands.add(
  "Post_Clients",
  (imagePath, imageType, attr1, attr2, attr1Val, done) => {
    cy.fixture(imagePath, "binary").then(imageBin => {
      Cypress.Blob.binaryStringToBlob(imageBin, imageType).then(blob => {
        const xhr = new XMLHttpRequest();
        xhr.withCredentials = true;
        const data = new FormData();
        data.set(attr1, attr1Val);
        data.set(attr2, blob);
        xhr.open("POST", "https://api.teamapp.myhelpling.com/admin/clients");
        xhr.responseType = "json"
        xhr.setRequestHeader("accept", "application/json");
        xhr.setRequestHeader("access-token", accesstoken);
        xhr.setRequestHeader("client", client);
        xhr.setRequestHeader("expiry", expiry);
        xhr.setRequestHeader("token-type", tokentype);
        xhr.setRequestHeader("uid", uid);
        xhr.onload = function() {
          done(xhr);
        };
        xhr.onerror = function() {
          done(xhr);
        };
        xhr.send(data);
      });
    });
  }
);


it.only("API POSTing TEST", () => {
    cy.Post_Clients(
      "/images/clients/Golden JPEG.jpeg",
      "image/jpeg",
      "client[name]",
      "client[client_logo_attributes][content]",
      "Test Attr 1 Value is Hi!!!",
      resp => {
        cy.writeFile(
          "cypress/fixtures/POST API OUTPUT DATA/Client.json",
          resp.response
        );
        expect(response.status).to.eq(201);
      }
    );
  });

Обратите внимание, что утверждение expect(response.status).to.eq(201); работает хорошо.

Следующий код правильно регистрирует тело в консоли

cy.log("Response Body", resp.response);
console.log("Response Body", resp.response);

Тело ответа: -

{"client":{"id":452,"name":"Test Attr 1 Value is Hi!!!","client_logo":{"id":543,"path":"https://api.teamapp.myhelpling.com/uploads/client_images/6279486665-1551780183.","thumb":"https://api.teamapp.myhelpling.com/uploads/client_images/thumb_6279486665-1551780183.","medium":"https://api.teamapp.myhelpling.com/uploads/client_images/medium_6279486665-1551780183.","large":"https://api.teamapp.myhelpling.com/uploads/client_images/medium_6279486665-1551780183.","filename":"blob","ratio":1.78}}}

, но

cy.writeFile(
"cypress/fixtures/POST API OUTPUT DATA/Client.json",resp.response
);

не делаетСохраните тело ответа в файле Client.JSON.

cy.writeFile, кажется, не работает в этом коде.Я подтвердил это, передав JSON, например, {"A": "B"}, и это тоже не дошло до JSON.

1 Ответ

0 голосов
/ 12 марта 2019

Спасибо всем за помощь.Я заставил его работать, вызывая cy.writeFile внутри события onLoad, прежде чем запускать запрос XHR.Вот пример кода с некоторыми другими обновлениями, которые я сделал для других моих работ: -

Cypress.Commands.add(
  "Post_Bucket",
  (imagePath, imageType, title, img, titleVal) => {
    cy.fixture(imagePath, "binary").then(imageBin => {
      Cypress.Blob.binaryStringToBlob(imageBin, imageType).then(blob => {
        const xhr = new XMLHttpRequest();
        const data = new FormData();
        data.set(title, titleVal);
        data.set(img, blob);
        cy.readFile(Cypress.env("IDStore")).then(obj => {
          xhr.open(
            "POST",
            Cypress.env("BucketPostURLPart1") +
              obj.journeyID +
              Cypress.env("BucketPostURLPart2"),
            false
          );
          xhr.setRequestHeader("accept", "application/json");
          xhr.setRequestHeader("access-token", accesstoken);
          xhr.setRequestHeader("client", client);
          xhr.setRequestHeader("expiry", expiry);
          xhr.setRequestHeader("token-type", tokentype);
          xhr.setRequestHeader("uid", uid);
          xhr.onload = function() {
            if (this.status === 201) {
              cy.writeFile(
                Cypress.env("BucketOutputFile"),
                JSON.parse(this.responseText)
              );
              cy.readFile(Cypress.env("IDStore")).then(obj => {
                obj.bucketID = JSON.parse(this.responseText).bucket.id;
                cy.writeFile(Cypress.env("IDStore"), obj);
              });
            }
          };
          xhr.send(data);
        });
      });
    });
  }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...