最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How to print the request logs (like request url,request body, request queryParam) on supertest failure? - Stack Ove

programmeradmin0浏览0评论

I want to print or console log below details on failure for Supertest expect failure for the below request on success no need to print any thing on success

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();

on failure lets say I modify the url as dummy instead of pull, I need to know the request url, path parma and request body if any,

currenly on trying to add it in the above way it only gives the below error

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 IningMessage.<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)

things to note, I am using this in Typescript, inside the async function, thought this is not a blocker for now.

I want to print or console log below details on failure for Supertest expect failure for the below request on success no need to print any thing on success

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();

on failure lets say I modify the url as dummy instead of pull, I need to know the request url, path parma and request body if any,

currenly on trying to add it in the above way it only gives the below error

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 IningMessage.<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)

things to note, I am using this in Typescript, inside the async function, thought this is not a blocker for now.

Share Improve this question edited May 30, 2021 at 15:17 Bharathan Kumaran asked May 26, 2021 at 16:41 Bharathan KumaranBharathan Kumaran 1,05611 silver badges24 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 4

After multiple try and attempts, I was able to e up with a function that logs the request details, I pass on the response from supertest along with the expected status code. On failure, the function will log the details of request and response like path parm, query parm, req body

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)}
  `
  );
};

usage in jest test file


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

The solution is inspired from one of the suggestion in supertest github issue. Thanks to sakovias. Note: this is function that logs the data, we can still have this as wrapper to the expect itself, which I will post as separate thread.

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论