Search code examples
typescriptts-jest

How to parse typescript file to get describe and test information, Jest-editor-parser is not giving tree structure for nested block


I am looking at a problem where i need to parse typescript file for nested describe and test info, i am using jest-editor-support for the same but nested describe is not parsed as expected. code format is below. I also added actual output and expected output, any existing parser to achieve this?

  describe('describe 1', () => {
  describe('describe 1.1 ', () => {
    test(`test 1`, async () => {
      expect(console.log('Printing logs'));
    });
  });
});
describe('describe 2', () => {
  describe('describe 2.1 ', () => {
    test(`test 2`, async () => {
      expect(console.log('Printing logs'));
    });
  });
});

Jest editor output is. -

  describeBlocks: [
    DescribeBlock {
      type: 'describe',
      name: 'describe 1'
    },
    DescribeBlock {
      type: 'describe',
      name: 'describe 1.1 '
    },
    DescribeBlock {
      type: 'describe',
      name: 'describe 2'
    },
    DescribeBlock {
      type: 'describe',
      name: 'describe 2.1 '
    }
  ],
  itBlocks: [
    ItBlock {
      type: 'it',
      name: 'test 1'
    },
    ItBlock {
      type: 'it',
      name: 'test 2'
    }
  ]

expected output is

  describeBlocks: [
DescribeBlock {
  type: 'describe',
  name: 'describe 1',
  describeBlocks: [ 
  DescribeBlock {
     type: 'describe',
     name: 'describe 1.1 '
      itBlocks: [
         ItBlock {
           type: 'it',
           name: 'test 1'
         }
      ]
  }]
},
DescribeBlock {
  type: 'describe',
  name: 'describe 2',
    describeBlocks: [ 
    DescribeBlock {
       type: 'describe',
       name: 'describe 2.1 '
        itBlocks: [
           ItBlock {
             type: 'it',
             name: 'test 2'
           }
        ]
    }]
}
]

Solution

  • parsed_info = js.parse(file); and then traverse each child using - parsed_info.root['children'].length

    I had to use DFT(depth first traversal) to get the name of describe and test name.