Как распечатать журналы запросов (например, URL-адрес запроса,тело запроса, параметр запроса запроса) при сбое супертестирования?

#javascript #typescript #testing #jestjs #supertest

Вопрос:

Я хочу распечатать или консольный журнал ниже подробные сведения о сбое для супертеста ожидайте сбоя для приведенного ниже запроса при успешном выполнении не нужно ничего печатать при успешном выполнении

 const result = await request(dummy_url).get("repos/Microsoft/TypeScript/pulls")
      .set("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:87.0) Gecko/20100101 Firefox/87.0")
      .expect(200)
      .then(response => {
        console.log("success");
        console.log(response);
        return response;
      }).catch(error => {
        console.log("error");
        // console.log(error);
        return 2;
      })
    console.log(result)
    done();
 

при сбое допустим, я изменю URL-адрес как dummy вместо pull ,
Мне нужно знать URL-адрес запроса, путь к парме и тело запроса, если таковые имеются,

в настоящее время при попытке добавить его вышеуказанным способом он выдает только следующую ошибку

 Error: expected 200 "OK", got 404 "Not Found"
        at Object.<anonymous> (/Users/thoughtworks/projects/api-test-supertest-jest-typescript/__tests__/github-routes/jest.test.ts:40:8)
        at /Users/thoughtworks/projects/api-test-supertest-jest-typescript/node_modules/jest-jasmine2/build/queueRunner.js:45:12
        at new Promise (<anonymous>)
        at mapper (/Users/thoughtworks/projects/api-test-supertest-jest-typescript/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
        at /Users/thoughtworks/projects/api-test-supertest-jest-typescript/node_modules/jest-jasmine2/build/queueRunner.js:75:41
        at processTicksAndRejections (node:internal/process/task_queues:96:5)
    ----
        at Test.Object.<anonymous>.Test._assertStatus (/Users/thoughtworks/projects/api-test-supertest-jest-typescript/node_modules/supertest/lib/test.js:296:12)
        at /Users/thoughtworks/projects/api-test-supertest-jest-typescript/node_modules/supertest/lib/test.js:80:15
        at Test.Object.<anonymous>.Test._assertFunction (/Users/thoughtworks/projects/api-test-supertest-jest-typescript/node_modules/supertest/lib/test.js:311:11)
        at Test.Object.<anonymous>.Test.assert (/Users/thoughtworks/projects/api-test-supertest-jest-typescript/node_modules/supertest/lib/test.js:201:21)
        at localAssert (/Users/thoughtworks/projects/api-test-supertest-jest-typescript/node_modules/supertest/lib/test.js:159:12)
        at fn (/Users/thoughtworks/projects/api-test-supertest-jest-typescript/node_modules/supertest/lib/test.js:156:5)
        at Test.callback (/Users/thoughtworks/projects/api-test-supertest-jest-typescript/node_modules/superagent/src/node/index.js:902:3)
        at fn (/Users/thoughtworks/projects/api-test-supertest-jest-typescript/node_modules/superagent/src/node/index.js:1130:18)
        at IncomingMessage.<anonymous> (/Users/thoughtworks/projects/api-test-supertest-jest-typescript/node_modules/superagent/src/node/parsers/json.js:19:7)
        at Stream.emit (node:events:365:28)
 

что следует отметить,
Я использую это в машинописном тексте, внутри асинхронной функции, подумал, что сейчас это не блокировщик.

Ответ №1:

После нескольких попыток и попыток я смог придумать функцию, которая регистрирует данные запроса, я передаю ответ от супертеста вместе с ожидаемым кодом состояния. При сбое функция будет регистрировать детали запроса и ответа, такие как parm пути, parm запроса, тело запроса

 import SuperTest from "supertest";
export const checkStatusCode = (res: any, expectedStatus: any = 200): SuperTest.Response => {
  if (res.status === expectedStatus) {
    return res
  };
  const error = res.error;
  const reqData = JSON.parse(JSON.stringify(res)).req;
  throw new Error(` 
  request-method  : ${JSON.stringify(reqData.method)} 
  request-url     : ${JSON.stringify(reqData.url)}
  request-data    : ${JSON.stringify(reqData.data)}
  request-headers : ${JSON.stringify(reqData.headers)}
  reponse-status  : ${JSON.stringify(res.status)}
  reponse-body    : ${JSON.stringify(res.body)}
  `
  );
};
 

использование в тестовом файле jest

 
describe("Jest - Api - user", () => {
  it("Verify POST ", async () => {
    const res = await request(url.someurl)
      .post("/dummy")
      .set("Authorization", authToken)
      .send(updateThirdParty)
    checkStatusCode(res, 200)
  })
})

 

Решение основано на одном из предложений в выпуске supertest github.
Благодаря саковиасу.
Примечание: это функция, которая регистрирует данные, мы все еще можем использовать ее в качестве оболочки для самого ожидаемого, которую я опубликую в отдельной теме.