Вирішення проблем
Йой, щось пішло не так? Використайте цю інструкцію, щоб розв'язати проблеми з Jest.
Тести падають і ви не знаєте чому
Спробуйте використати вбудовану в Node налагод жувальну підтримку. Розмістіть debugger;
виклик в будь-якому вашому тестів, і тоді в директорії вашого проекту запустіть:
node --inspect-brk node_modules/.bin/jest --runInBand [any other arguments here]
або для Windows
node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand [any other arguments here]
This will run Jest in a Node process that an external debugger can connect to. Note that the process will pause until the debugger has connected to it.
To debug in Google Chrome (or any Chromium-based browser), open your browser and go to chrome://inspect
and click on "Open Dedicated DevTools for Node", which will give you a list of available node instances you can connect to. Click on the address displayed in the terminal (usually something like localhost:9229
) after running the above command, and you will be able to debug Jest using Chrome's DevTools.
The Chrome Developer Tools will be displayed, and a breakpoint will be set at the first line of the Jest CLI script (this is done to give you time to open the developer tools and to prevent Jest from executing before you have time to do so). Click the button that looks like a "play" button in the upper right hand side of the screen to continue execution. When Jest executes the test that contains the debugger
statement, execution will pause and you can examine the current scope and call stack.
Параметр cli --runInBand
слідкує, щоб Jest запускав тестування в одному й тому ж процесі, а не запускав власні процеси для окремих тестів. Normally Jest parallelizes test runs across processes but it is hard to debug many processes at the same time.
Налагодження в VS Code
There are multiple ways to debug Jest tests with Visual Studio Code's built-in debugger.
To attach the built-in debugger, run your tests as aforementioned:
node --inspect-brk node_modules/.bin/jest --runInBand [any other arguments here]
або для Windows
node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand [any other arguments here]
Then attach VS Code's debugger using the following launch.json
config:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach",
"port": 9229
}
]
}
To automatically launch and attach to a process running your tests, use the following configuration:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Jest Tests",
"type": "node",
"request": "launch",
"runtimeArgs": [
"--inspect-brk",
"${workspaceRoot}/node_modules/.bin/jest",
"--runInBand"
],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
}
]
}
or the following for Windows:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Jest Tests",
"type": "node",
"request": "launch",
"runtimeArgs": [
"--inspect-brk",
"${workspaceRoot}/node_modules/jest/bin/jest.js",
"--runInBand"
],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
}
]
}
If you are using Facebook's create-react-app
, you can debug your Jest tests with the following configuration:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug CRA Tests",
"type": "node",
"request": "launch",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/react-scripts",
"args": [
"test",
"--runInBand",
"--no-cache",
"--env=jsdom",
"--watchAll=false"
],
"cwd": "${workspaceRoot}",
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
}
]
}
More information on Node debugging can be found here.