使用 Jest 测试特定文件

tns*_*day 6 javascript testing jestjs

在我的项目文件夹中,我有很多子文件夹,每个子文件夹中都有 js 代码和 test.js 文件。我希望能够测试特定文件。例如,假设我们的项目文件夹中有“fib”文件夹:

\n
C:.\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80exercises\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80fib\n            fib-test.js\n            index.js\n
Run Code Online (Sandbox Code Playgroud)\n

现在,从练习文件夹中执行 jest 命令:

\n
jest fib\\fib-test.js\n
Run Code Online (Sandbox Code Playgroud)\n

我得到:

\n
No tests found, exiting with code 1\nRun with `--passWithNoTests` to exit with code 0\nIn C:\\exercises\n  62 files checked.\n  testMatch: **/__tests__/**/*.[jt]s?(x), **/?(*.)+(spec|test).[tj]s?(x) - 26 matches\n  testPathIgnorePatterns: \\\\node_modules\\\\ - 62 matches\n  testRegex:  - 0 matches\nPattern: fib\\fib-test.js - 0 matches\n
Run Code Online (Sandbox Code Playgroud)\n

如果我只是开玩笑,我将运行所有测试。如果我将 fib 文件夹移出练习文件夹,它会按预期工作。这是所有文件的代码:

\n

索引.js:

\n
function fib(n) {}\n\nmodule.exports = fib;\n
Run Code Online (Sandbox Code Playgroud)\n

测试.js:

\n
const fib = require(\'./index\');\n\ntest(\'Fib function is defined\', () => {\n  expect(typeof fib).toEqual(\'function\');\n});\n\ntest(\'calculates correct fib value for 1\', () => {\n  expect(fib(1)).toEqual(1);\n});\n\ntest(\'calculates correct fib value for 2\', () => {\n  expect(fib(2)).toEqual(1);\n});\n\ntest(\'calculates correct fib value for 3\', () => {\n  expect(fib(3)).toEqual(2);\n});\n\ntest(\'calculates correct fib value for 4\', () => {\n  expect(fib(4)).toEqual(3);\n});\n\ntest(\'calculates correct fib value for 15\', () => {\n  expect(fib(39)).toEqual(63245986);\n});\n
Run Code Online (Sandbox Code Playgroud)\n

包.json

\n
{\n  "name": "dev",\n  "version": "1.0.0",\n  "description": "",\n  "main": "index.js",\n  "scripts": {\n    "test": "echo \\"Error: no test specified\\" && exit 1"\n  },\n  "jest": {\n    "testEnvironment": "node"\n  },\n  "author": "",\n  "license": "ISC"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我已经尝试了所有这些解决方案但没有成功:

\n
    \n
  1. 在 Jest 中运行特定测试套件的单个测试
  2. \n
  3. 如何使用 Jest 运行单个测试?
  4. \n
  5. 如何使用 Jest 测试单个文件?
  6. \n
\n

但能够通过 --watch 标志运行 jest 命令来实现所需的结果,然后在正则表达式菜单中输入 fib\\test.js 的相对路径。问题是不进入手表菜单怎么办?

\n

小智 4

长话短说

  1. 将您的测试文件重命名fib-test.jsfib.test.js
  2. 跑步jest fib.test.js
  3. volia,jest将运行您指定的文件
  4. 您还可以测试您指定的任意数量的测试文件,方法是jest XXX.test.js YYY.test.js

很长的故事

我发现你的问题隐含着一些假设。如果您明确列出它们,您可以使问题更加具体:

  1. 你在 Windows 机器上运行
  2. 您的项目根目录或jest.config.js位于C:\exercises

对于 (1),我手头没有 Windows 计算机,请运行并验证我的解决方案。

抛开假设不谈,错误发生在您的测试文件名:fib-test.js. jest正在寻找XXX.test.js并且不会匹配和测试XXX-test.js。您可以在错误消息中找到线索:

testMatch: ... **/?(*.)+(spec|test).[tj]s?(x) ...
Run Code Online (Sandbox Code Playgroud)

将文件重命名为 后fib.test.jsjest fib.test.js将从项目根目录或以下位置搜索所有子文件夹jest.config.js;并匹配和测试特定的测试文件。

我的jest版本:"ts-jest": "^27.0.3"

小技巧#1

再次查看完整的错误消息:

testMatch: **/__tests__/**/*.[jt]s?(x), **/?(*.)+(spec|test).[tj]s?(x) - 26 matches
Run Code Online (Sandbox Code Playgroud)

实际上,您可以将所有测试用例分组<rootDir>/__tests__/并放入__test__.gitignore这样您的测试用例就可以保密并且不会推送到 Git。

小技巧#2

因为jest查看每个子文件夹,所以您实际上可以将文件夹名称放在测试文件之前:

jest fib/fib.test.js本质上相当于jest fib.test.js

不过,开玩笑,看不出有什么理由让自己如此烦恼。