我在文件 fix-order-test.js 中有一个“适用于嵌套子项”的测试。
运行以下运行文件中的所有测试。
jest fix-order-test
如何只运行一个测试?以下内容在搜索指定正则表达式的文件时不起作用。
jest 'works with nested children'
--testNamePattern
'works with nested children'
Jest CLI Options #testNamePattern
在命令行中,使用 --testNamePattern
或 -t
标志:
jest -t 'fix-order-test'
这只会运行与您提供的测试名称模式匹配的测试。它在 Jest documentation 中。
另一种方法是在监视模式下运行测试,jest --watch
,然后按 P 通过键入测试文件名来过滤测试或按 T 运行单个测试名称.
如果 describe
块中有 it
,则必须运行
jest -t '<describeString> <itString>'
Jest documentation 建议如下:
如果测试失败,首先要检查的事情之一应该是测试是否失败,因为它是唯一运行的测试。在 Jest 中,只运行一个测试很简单——只需将该测试命令临时更改为 test.only
test.only('this will be the only test that runs', () => {
expect(true).toBe(false);
});
或者
it.only('this will be the only test that runs', () => {
expect(true).toBe(false);
});
test.only
。因此,如果您只想在包含许多文件的一组测试用例中包含许多测试用例的文件中运行一个测试,那么不幸的是,您必须运行该单个文件 jest myTestFile.test.js
运行单个 Jest 测试的完整命令
命令:
node <path-to-jest> -i <you-test-file> -c <jest-config> -t "<test-block-name>"
Windows:node_modules\jest\bin\jest.js
其他:node_modules/.bin/jest
-i
-c
-t
例子:
describe("math tests", () => {
it("1 + 1 = 2", () => {
expect(1 + 1).toBe(2);
});
it("-1 * -1 !== -1", () => {
expect(-1 * -1).not.toBe(-1);
});
});
所以,命令
node node_modules/jest/bin/jest.js -i test/math-tests.js -c test/tests-config.json -t "1 + 1 = 2"
将测试 it("1 + 1 = 2", ...)
,但如果您将 -t
参数更改为 "math tests"
,那么它将从 describe("math tests",...)
块运行两个测试。
评论:
对于 Windows,将 node_modules/.bin/jest 替换为 node_modules\jest\bin\jest.js。这种方法允许您调试正在运行的脚本。要启用调试,请在命令中添加“--inspect-brk”参数。
通过“package.json”中的 NPM 脚本运行单个 Jest 测试
安装 Jest 后,您可以使用 NPM scripts 简化此命令(如上)的语法。在 "package.json"
中,将新脚本添加到 "scripts"
部分:
"scripts": {
"test:math": "jest -i test/my-tests.js -t \"math tests\"",
}
在这种情况下,我们使用别名 'jest'
而不是写入它的完整路径。此外,我们不指定配置文件路径,因为我们也可以将它放在 "package.json"
中,Jest 默认会查看它。现在您可以运行以下命令:
npm run test:math
并且将执行包含两个测试的 "math tests"
块。或者,当然,您可以通过名称指定一个特定的测试。
另一种选择是在 "test:math"
脚本之外提取 <the-name-of-test-block>
参数并从 NPM 命令传递它:
包.json:
"scripts": {
"test:math": "jest -i test/my-tests.js -t",
}
命令:
npm run test:math "math tests"
现在您可以使用更短的命令来管理运行测试的名称。
评论:
'jest' 命令将适用于 NPM 脚本,因为
在运行任何生命周期脚本时,npm 使“./node_modules/.bin”成为 PATH 环境变量中的第一个条目,因此即使您的程序未全局安装(NPM 博客)2. 这种方法似乎也不会正常工作允许调试,因为 Jest 是通过其二进制/CLI 运行的,而不是通过节点。
在 Visual Studio Code 中运行选定的 Jest 测试
如果您使用的是 Visual Studio Code,您可以利用它并通过按 F5 按钮运行当前选择的测试(在代码编辑器中)。为此,我们需要在 ".vscode/launch.json"
文件中创建一个新的 launch configuration block。在该配置中,我们将使用 predefined variables,在运行时将其替换为适当的(不幸的是 not always)值。在所有可用的资源中,我们只对这些感兴趣:
${relativeFile} - 当前打开的相对于 ${workspaceFolder} 的文件
${selectedText} - 活动文件中当前选定的文本
但是在写出启动配置之前,我们应该在我们的 'package.json'
中添加 'test'
脚本(如果我们还没有这样做的话)。
文件包.json:
"scripts": {
"test": "jest"
}
然后我们可以在启动配置中使用它。
启动配置:
{
"type": "node",
"request": "launch",
"name": "Run selected Jest test",
"runtimeExecutable": "npm",
"runtimeArgs": [
"run-script",
"test"
],
"args": [
"--",
"-i",
"${relativeFile}",
"-t",
"${selectedText}"
],
"console": "integratedTerminal",
}
它实际上与此答案中前面描述的命令相同。现在一切准备就绪,我们可以运行我们想要的任何测试,而无需手动重写命令参数。
这是您需要做的所有事情:
在调试面板中选择当前创建的启动配置:在代码编辑器中打开包含测试的文件,然后选择要测试的测试名称(不带引号):按 F5 按钮。
瞧!
现在运行你想要的任何测试。只需在编辑器中打开它,选择它的名称,然后按 F5。
不幸的是,在 Windows 机器上它不会是“voilà”,因为它们用路径 having reversed slashes 替换(谁知道为什么)${relativeFile}
变量,而 Jest 不会理解这样的路径。 (如果命令需要故障排除,请参阅 https://www.basefactor.com/using-visual-studio-code-to-debug-jest-based-unit-tests 中的类似方法)
评论:
要在调试器下运行,不要忘记添加“--inspect-brk”参数。在这个配置示例中,我们没有 Jest 配置参数,假设它包含在“package.json”中。
npx
以大大简化调用 Jest,无论操作系统如何。
${fileBasename}
而不是 ${relativeFile}
,因为 jest 无法解析带有反斜杠 '\' 的路径(Windows)
"--runTestsByPath"
参数来告诉 Jest 将 "${relativeFile}"
参数视为普通路径而不是 RegEx,以便正确解析反斜杠。
如其他答案所述,test.only
仅过滤掉同一文件中的其他测试。所以其他文件中的测试仍然会运行。
因此,要运行单个测试,有两种方法:
选项 1:如果您的测试名称是唯一的,您可以在监视模式下输入 t 并输入您要运行的测试的名称。
选项 2:在监视模式下按 p 以输入您要运行的文件名的正则表达式。 (当您在监视模式下运行 Jest 时,会显示类似这样的相关命令)。将其更改为 it.only 在您要运行的测试上。
在监视模式下按 p 以输入要运行的文件名的正则表达式。 (当您在监视模式下运行 Jest 时,会显示类似这样的相关命令)。
将其更改为 it.only 在您要运行的测试上。
使用上述任何一种方法,Jest 只会在您指定的文件中运行单个测试。
如果您将 jest
作为脚本命令运行,例如 npm test
,则需要使用以下命令使其工作:
npm test -- -t "fix order test"
npm test -- testFile.js -t "fix order test"
。否则它将遍历所有测试文件以查找匹配项,这需要更长的时间。
您还可以使用 f
或 x
来集中或排除测试。例如
fit('only this test will run', () => {
expect(true).toBe(false);
});
it('this test will not run', () => {
expect(true).toBe(false);
});
xit('this test will be ignored', () => {
expect(true).toBe(false);
});
xit
对我有用,但 fit
没有。我正在使用 jest@22.4.4。
fit
不起作用的原因与 it.only
不起作用的原因相同。它只会阻止 同一文件中的其他测试 运行。其他文件仍在运行。
您可以尝试使用以下命令,因为它对我有用
npm run test -- -t 'Your test name'
或者您可以做的另一种方法是在您的测试中添加 .only
,如下所示并运行命令 npm run test
it.only('Your test name', () => {})
如上一个答案所述,您可以运行命令
jest -t 'fix-order-test'
如果 describe
块中有 it
,则必须运行
jest -t '<describeString> <itString>'
利用:
npm run test -- test-name
这仅在您的测试规范名称是唯一的情况下才有效。
上面的代码将引用具有此名称的文件:test-name.component.spec.ts
describe()
块内的文本。
使用 latest Jest version,您可以使用以下方法之一仅运行一个测试,对于测试套件也是如此。
it.only('test 1', () => {})
test.only('test 1', () => {})
fit('test 1', () => {})
如果测试名称是唯一的,jest 'test 1'
也可以工作。
在开玩笑的 26.6.0 上,这是唯一对我有用的东西:
jest -- test/unit/name-of-test-file.test.ts
并观看
jest --watch -- test/unit/name-of-test-file.test.ts
it.only
或 describe.only
可以很好地缩小测试范围
在 Visual Studio Code 中,这让我只能运行/调试一个带有断点的 Jest 测试:Debugging tests in Visual Studio Code
我的 launch.json
文件里面有这个:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Jest All",
"program": "${workspaceFolder}/node_modules/.bin/jest",
"args": ["--runInBand"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"windows": {
"program": "${workspaceFolder}/node_modules/jest/bin/jest",
}
},
{
"type": "node",
"request": "launch",
"name": "Jest Current File",
"program": "${workspaceFolder}/node_modules/.bin/jest",
"args": ["${relativeFile}"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"windows": {
"program": "${workspaceFolder}/node_modules/jest/bin/jest",
}
}
]
}
这在文件 package.json
中:
"scripts": {
"test": "jest"
}
要运行一项测试,在该测试中,将 test(或 it)更改为 test.only(或 it.only)。要运行一个测试套件(多个测试),请将 describe 更改为 describe.only。
如果需要,设置断点。
在 Visual Studio Code 中,转到调试视图(Shift + Cmd + D 或 Shift + Ctrl + D)。
从顶部的下拉菜单中,选择 Jest Current File。
单击绿色箭头运行该测试。
package.json
中的 "scripts": { "test": "jest" }
,因为您已在 launch.json
的 "program"
参数中指定了完整路径。
"${relativeFile}"
帮助我在 VSCode 中运行单个文件。
debugger;
,在我的情况下,通过 UI 设置断点也不适用于测试。
https://i.stack.imgur.com/riUgi.png
npm test __tests__/filename.test.ts
- 运行单个文件。
test.only('check single test', () => { expect(true).toBe(true)});
- 运行单个测试用例
test.skip('to skip testcase, () => {expect(false).toBe(false_});
- 跳过测试用例
https://jestjs.io/docs/cli#--testnamepatternregex
您的测试类似于这个名为 my.test.js 的文件
test("My Sum", () => {
const sum = 3;
expect(sum).toBe(3);
});
使用测试名称在 CLI 上运行
jest -t Sum
使用带有正则表达式匹配文件名部分的 npm test 示例:my.test.js
npm test -t my
这是我的看法:
./node_modules/.bin/jest --config test/jest-unit-config.json --runInBand src/components/OpenForm/OpenForm.spec.js -t 'show expanded'
笔记:
./node_modules/.bin/... 是访问本地安装的包附带的本地安装的 Jest(或 Mocha 或...)二进制文件的好方法。 (是的,在您的 npm 脚本中,您以前可以不开玩笑,但这在命令行上很方便...(这也是您调试配置的良好开端,无论您使用哪种 IDE...)
您的项目可能没有一组配置选项。但如果确实如此(查看 package.json 中的脚本),这就是您所需要的。
--runInBand – 如前所述,不知道您的配置,但如果您专注于开发/修复单个测试,您宁愿不想与网络工作者打交道......
是的,您可以提供文件的完整、显式路径
或者,您可以使用 -t 不运行该文件中的所有测试,而只运行一个测试(这里:一个名称中带有“显示扩展”的内容)。通过将 .only() 粘贴到该文件中可以实现相同的效果。
npx jest blah
,而不是在 node_mpdules bin 中查找 jest 二进制文件
只是一个小插件,因为如果使用 ./node_modules/.bin/jest -i ...
或仅使用 jest -i ...
或 npm test -- -i ...
似乎存在某种冲突
如果您在全局安装了 jest(与 npm install -g jest 一样),则只需调用 jest 即可,这是一种处理依赖项的不太干净的方式脚本绕道,您可以使用 npx jest -i ... => 这正是 npx 的用途。它使您免于编写 ./node_modules/.bin/....
我花了一段时间才找到这个,所以我想在这里为像我这样使用纱线的人添加它:
yarn test -i "src/components/folderX/folderY/.../Filename.ts" -t "name of test"
所以 -i 之后的文件名和 -t 之后的测试名。
对于 Windows 中的 VSCode,我在我的 launch.json 文件中使用这些。注意使用 ${pathSeparator} 来处理 Win 和 Mac 中的差异。在调试下拉列表中选择一个,然后按 F5 运行。
{
"name": "Debug Selected Jest Test",
"type": "node",
"request": "launch",
"runtimeArgs": ["--inspect-brk", "${workspaceRoot}/node_modules/jest/bin/jest.js", "--runInBand"],
"args": ["--", "-i", "${fileDirnameBasename}${pathSeparator}${fileBasename} ", "-t", "${selectedText}"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"port": 9229
},
{
"name": "Debug Named Jest Test",
"type": "node",
"request": "launch",
"runtimeArgs": ["--inspect-brk", "${workspaceRoot}/node_modules/jest/bin/jest.js", "--runInBand"],
"args": ["--", "-i", "${fileDirnameBasename}${pathSeparator}${fileBasename} ", "-t", "filename.test.js"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"port": 9229
},
在最新版本的 jest 中,您可以通过多种方式运行任何单个测试。
fit('only this test will run', () => {});
it.only('only this test will run',() => {});
运行这个命令行:
npm run test-jest unit_test/file_name -- -t test_name
我的 Package.json
"test-jest": "jest --verbose=true --force-exit",
"test-jest:watch": "jest --watchAll",
检查 Jest CLI 文档后,我发现这是我们在特定文件中运行特定测试的方式。
jest --findRelatedTests path/to/fileA.js path/to/fileB.js -t "test name"
用纱,
yarn test --findRelatedTests path/to/fileA.js path/to/fileB.js -t "test name"
使用 npm,
npm test -- --findRelatedTests path/to/fileA.js path/to/fileB.js -t "test name"
如需参考,请查看Jest Cli Options
it()
函数中特定测试名称的测试模式,而不是文件名。这是我的想法。npm test -- -t "fix order test"
./node_modules/.bin/jest --config=./.jest.config.json ./src/x/y/sites.js/sitesWorker.test.js -t 'given only incorrect sites'
-t
,它将只运行您关心的测试,而不会跳过所有其他测试。