如何在当前打开的文件 (仅此一个) 上以调试模式启动jest,而不考虑操作系统(Windows,linux,mac)如何。
问题 :
在Windows下使用vscode时,无法嘲笑当前(活动)文件,并且仅此一个。
此调试配置(来自https://github.com/microsoft/vscode-recipes/tree/master/debugging-jest-tests):
{
"type": "node",
"request": "launch",
"name": "Jest Current File",
"program": "${workspaceFolder}/node_modules/.bin/jest",
"args": [
"${fileBasenameNoExtension}",
"--config",
"jest.config.js"
],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"disableOptimisticBPs": true,
"windows": {
"program": "${workspaceFolder}/node_modules/jest/bin/jest",
}
}
如果您有多个同名测试(例如index.test.js),将不仅运行活动测试
如果我替换
"args": [
"${fileBasenameNoExtension}",
....
]
作者
"args": [
"${file}",
...
]
根本不起作用,因为第一个参数开玩笑地期望它是正则表达式,并且${file}
返回文件的绝对路径,在Windows计算机上它将包含{{1 }}反斜杠,反斜杠将被解释为在模式中转义了以下字符。
仔细阅读Jest的文档后,就无法指定单个文件。
VSCode无法将变量转换为正则表达式。
this question中的解决方案尽管几乎相似,但由于使用相同名称的文件而失败(案例1),因此也无法使用。
因此,要么运行了比预期更多的测试,要么根本没有运行任何测试。
我找到了一个涉及单独脚本的解决方案,但任何其他解决方案都将不胜感激。
答案 0 :(得分:2)
我认为$ {relativeFile}不会起作用,因为它提供了Jest不喜欢的相对路径。
相反,您应该使用$ {fileBasename}
"args": [
...,
"${fileBasename}"
]
答案 1 :(得分:0)
上述问题中提到的解决方案(涉及一个单独的脚本):
调试配置:
{
"type": "node",
"request": "launch",
"name": "Jest Current File",
"program": "${workspaceFolder}/src/utils/betterJestCli.js",
"args": [
"${relativeFile}",
],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"disableOptimisticBPs": true,
"windows": {
"program": "${workspaceFolder}/src/utils/betterJestCli.js",
},
"cwd": "${workspaceFolder}",
},
betterJestCli.js :
const { exec } = require('child_process');
const path = process.argv[2];
const child = exec(
['"./node_modules/.bin/jest"', path.replace(/\\/g, '/'), '--config', 'jest.config.js'].join(' '),
// eslint-disable-next-line prefer-arrow-callback, func-names
function (error/* , stdout, stderr */) {
if (error) {
// eslint-disable-next-line no-console
console.log(error);
}
}
);
// to see Jest's output
child.stderr.pipe(process.stderr);
因此在相对路径上用\
替换/
可以解决问题,因为从正则表达式的角度来看,/
没有任何意义(转义.
会很好也有想法)。
最大的问题是我在终端中丢失了Jest的输出颜色。
尚未在其他环境(Linux,Mac)上进行测试,因此我不知道它是否可以跨环境使用。
还有其他想法吗?
答案 2 :(得分:0)
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Jest single run all tests",
"program": "${workspaceRoot}/node_modules/jest/bin/jest.js",
"args": [
"--verbose",
"-i",
"--no-cache"
],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
},
{
"type": "node",
"request": "launch",
"name": "Jest watch all tests",
"program": "${workspaceRoot}/node_modules/jest/bin/jest.js",
"args": [
"--verbose",
"-i",
"--no-cache",
"--watchAll"
],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
},
{
"type": "node",
"request": "launch",
"name": "Jest watch current file",
"program": "${workspaceFolder}/node_modules/jest/bin/jest",
"args": [
"${fileBasename}",
"--verbose",
"-i",
"--no-cache",
"--watchAll"
],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
}
]
}
答案 3 :(得分:0)
接受的答案提供了运行所有测试、观看所有测试或观看单个文件的启动任务。如果您只想在当前文件中运行测试,那么 --testPathPattern
选项就是您想要的:
{
"type": "node",
"request": "launch",
"name": "Jest debug current file",
"program": "${workspaceRoot}/node_modules/jest/bin/jest.js",
"args": ["--verbose", "-i", "--no-cache", "--testPathPattern", "${fileBasename}"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
}
这确实存在类似名称的文件可能会被错误运行的问题,因为 ${fileBasename} 只是文件名 - 它根本不匹配路径。
仔细想想,这不是一个非常好的答案。我将把它搁置一旁,与其说是有用的东西,不如说是警告。