4

Our project is currently using jest for Angular tests. We use jest-preset-angular and it is configured to run in debug mode within Visual Studio Code. The debugging works except that it first converts the spec.ts files to JavaScript. This means that the breakpoint is usually not where I want it to be as the file has been transformed from TypeScript to JavaScript.

How can I configure my project so that I can debug my tests as Typescript within Visual Studio Code?

I have tried running Karma along side Jest as the Karma experience for debugging in the browser is much easier. However, there are so many Jest dependencies within the tests that this is also a challenge.

launch.json
    {
      "name": "Tests",
      "type": "node",
      "request": "launch",
      "program": "${workspaceRoot}/node_modules/jest-cli/bin/jest.js",
      "stopOnEntry": false,
      "args": ["-i", "-o"],
      "cwd": "${workspaceRoot}",
      "preLaunchTask": null,
      "runtimeExecutable": null,
      "env": {
        "NODE_ENV": "test"
      },
      "console": "integratedTerminal",
      "outFiles": ["${workspaceRoot}/dist/**/*"],
      "sourceMaps": true
    }

package.json

  "jest": {
    "preset": "jest-preset-angular",
    "setupFilesAfterEnv": [
      "<rootDir>/setupJest.ts"
    ],
    "moduleDirectories": [
      "node_modules",
      "./"
    ],
    "testResultsProcessor": "jest-teamcity-reporter",
    "testMatch": [
      "**/app/**/*.spec.ts"
    ]

tsconfig.spec.json

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "outDir": "../out-tsc/spec",
    "module": "commonjs",
    "types": ["jest", "node"]
  },
  "files": ["src/test.ts", "src/polyfills.ts"],
  "include": ["src/**/*.spec.ts", "src/**/*.d.ts"]
}

1 Answer 1

7

I finally came across a suggestion in an article by Micha Pierzchala that was linked on https://jestjs.io/docs/testing-frameworks#angular. The article recommends IDE integrations, with the one for VS Code being vscode-jest. This is exactly what I was looking for and provides a fantastic debugging experience for your TypeScript code.

I didn't have to change anything about my jest configuration. I simply added this extension to my VS Code workspace.

enter image description here

Edit: I found vscode-jest to be quite buggy, thus I switched to vscode-jest-runner. With this extension, you initiate the test from a right-click-context menu. It has the same result in making the debugging experience much more pleasant for your TypeScript code.

enter image description here

Sign up to request clarification or add additional context in comments.

2 Comments

If somebody just migrated from karma to jest and does not see those tips provided by jest extension, please close and open vscode again.
In my case, I've issues because zone-testing is not included. This is imported in my setup-jest.ts, did you find some way to have it executed for each test?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.