Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Missing semicolon" error raised when mocking a class in Jest using Typescript

I'm using Typescript and trying to test my code with Jest, and I made a type casting on a class so I can mock it.

Unfortunately, when I ran the test suite I got the following error:

 SyntaxError: C:\Projects\sim_editor\server\src\tests\routes.test.ts: Missing semicolon (7:37)

Here is my code:

describe('Unit test api routes', () => {
    jest.mock('../controllers')
    const mkControllers = Controllers as jest.MockedClass<typeof Controllers>

    beforeEach(() => {
        mkControllers.mockClear()
    })

    .
    .
    .
    The rest of my test suite
 })

The error was referring the line where I declared "mkControllers".

Here is a deeper log of the error:

at Parser._raise (node_modules/@babel/parser/src/parser/error.js:97:45)
  at Parser.raiseWithData (node_modules/@babel/parser/src/parser/error.js:92:17)
  at Parser.raise (node_modules/@babel/parser/src/parser/error.js:41:17)
  at Parser.semicolon (node_modules/@babel/parser/src/parser/util.js:131:10)
  at Parser.parseVarStatement (node_modules/@babel/parser/src/parser/statement.js:707:10)
  at Parser.parseStatementContent (node_modules/@babel/parser/src/parser/statement.js:223:21)
  at Parser.parseStatement (node_modules/@babel/parser/src/parser/statement.js:163:17)
  at Parser.parseBlockOrModuleBlockBody (node_modules/@babel/parser/src/parser/statement.js:880:25)
  at Parser.parseBlockBody (node_modules/@babel/parser/src/parser/statement.js:856:10)
  at Parser.parseBlock (node_modules/@babel/parser/src/parser/statement.js:826:10)

Thanks.

like image 554
Dvir Bartov Avatar asked Mar 02 '21 00:03

Dvir Bartov


1 Answers

Apparently I didn't configure Babel to work with Typescript, as it is essential for Jest to use it. Make sure you follow the instructions here, under "Using Babel" and "Using Typescript"

like image 139
Dvir Bartov Avatar answered Nov 10 '22 15:11

Dvir Bartov