使用 Jest 测试特定文件

Posted

技术标签:

【中文标题】使用 Jest 测试特定文件【英文标题】:Test specific file using Jest 【发布时间】:2020-11-21 05:27:12 【问题描述】:

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

C:.
└───exercises
    └───fib
            fib-test.js
            index.js

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

jest fib\fib-test.js

我得到:

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

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

index.js:

function fib(n) 

module.exports = fib;

test.js:

const fib = require('./index');

test('Fib function is defined', () => 
  expect(typeof fib).toEqual('function');
);

test('calculates correct fib value for 1', () => 
  expect(fib(1)).toEqual(1);
);

test('calculates correct fib value for 2', () => 
  expect(fib(2)).toEqual(1);
);

test('calculates correct fib value for 3', () => 
  expect(fib(3)).toEqual(2);
);

test('calculates correct fib value for 4', () => 
  expect(fib(4)).toEqual(3);
);

test('calculates correct fib value for 15', () => 
  expect(fib(39)).toEqual(63245986);
);

package.json


  "name": "dev",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": 
    "test": "echo \"Error: no test specified\" && exit 1"
  ,
  "jest": 
    "testEnvironment": "node"
  ,
  "author": "",
  "license": "ISC"

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

    Run single test of a specific test suite in Jest How do I run a single test using Jest? How do I test a single file using Jest?

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

【问题讨论】:

【参考方案1】:

TL;DR

    将你的测试文件fib-test.js重命名为fib.test.js 运行jest fib.test.js volia, jest 将运行您指定的文件 您还可以测试您指定的任意数量的测试文件jest XXX.test.js YYY.test.js

长篇大论

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

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

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

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

testMatch: ... **/?(*.)+(spec|test).[tj]s?(x) ...

将文件重命名为fib.test.js 后,jest 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

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

小技巧#2

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

jest fib/fib.test.js本质上等同于jest fib.test.js

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

【讨论】:

以上是关于使用 Jest 测试特定文件的主要内容,如果未能解决你的问题,请参考以下文章

如何仅从特定文件夹运行 Jest 测试而忽略其他文件夹测试?

指定 jest 测试文件目录

使用 eslintrc 禁用特定文件结尾的 ESlint 规则

如何从 Jest watch 中排除文件?

使用 Jest-Enzyme 测试样式组件

使用 .ts 文件 (TypeScript) 配置 Jest 全局测试设置