Jest
Jest 是用于客户端 JavaScript 应用的测试平台,尤其适用于 React 应用。 在 Jest 官方网站了解有关该平台的更多信息。
您可以在 PyCharm 中直接使用 Jest 运行并调试测试。 您可以在树状视图中查看测试结果,并从中轻松导航到测试源。 编辑器中会在测试旁显示测试状态,并提供快速运行或调试的选项。
在开始之前
安装并配置 Jest
在内置的 终端 (Alt+F12 )中,键入:
npm install --save-dev jest
运行测试
借助 PyCharm,您可以直接在编辑器中快速运行单个 Jest 测试,或创建运行/调试配置来执行部分或全部测试。
有关为 JavaScript 和 TypeScript 代码创建 Vitest 测试的更多信息,请参阅 Vitest 官方网站上的 Vitest 功能。
从编辑器运行单个测试
在装订区域中点击
或
,并从列表中选择 运行 <test_name>。

您还可以直接在编辑器中查看测试是通过还是失败,这要归功于装订区域中的 测试状态 图标
和
。
从项目工具窗口运行文件夹中的所有测试
在 项目 工具窗口 (Alt+1) 中,选择包含测试的文件夹,然后选择 运行 '位于 <folder name> 的测试'。

创建 Jest 运行/调试配置
打开 Run/Debug Configuration 对话框( 在主菜单中),在左侧窗格中点击
,并从列表中选择 Jest。 运行/调试配置: Jest 对话框随即打开。
指定要使用的 Node.js 运行时。
如果您选择 项目 别名, PyCharm 将自动使用 JavaScript 运行时 页面中 Node 运行时 字段的项目默认解释器。 在大多数情况下, PyCharm 会检测项目默认运行时并自行填写该字段。
您还可以选择另一个已配置的本地或远程解释器,或点击
并配置一个新的解释器。
指定 jest、 react-scripts、 react-script-ts、 react-super-scripts 或 react-awesome-scripts 包的位置。
指定应用程序的工作目录。 默认情况下, 工作目录 字段会显示项目根文件夹。 若要更改此预定义设置,请指定目标文件夹的路径。
指定要运行的测试。 这可以是特定的测试或套件、整个测试文件,或包含测试文件的文件夹。
可选:
指定要使用的 jest.config.js 或 jest.config.ts 文件:从列表中选择相应的文件,或者点击
并在打开的对话框中进行选择,或者直接在字段中输入路径。
如果该字段为空,PyCharm 将查找具有
jest键的 package.json 文件。 搜索会在文件系统中从 工作目录 向上进行。 如果未找到合适的 package.json 文件,则会即时生成 Jest 默认配置。可选:
配置在相关源文件发生更改时自动重新运行测试。 为此,请在 Jest 选项 字段中添加
--watch标志。您也可以在测试会话期间,在 运行 工具窗口中按下 监视更改 切换按钮,以稍后开启 watch 模式;参见下文 在发生更改时自动重新运行测试(监视模式)。
可选:
指定执行命令所需的环境变量。 PyCharm 将在
process.env的补全列表中显示这些变量。
在 Node 参数 字段中,可选地键入特定于 Node.js 的命令行选项,以传递给 Node.js 可执行文件。 可接受的选项为:
使用
--require coffeescript/register可在运行期间即时将 CoffeeScript 文件编译为 JavaScript。此模式要求 register.js 文件(其属于
coffeescript包的一部分)位于您的项目中。 因此,请确保按照 安装 CoffeeScript 编译器 中的说明在本地安装coffeescript包。使用
--inspect或--inspect-brk参数以支持 Chrome 调试协议。要在项目中使用 ECMAScript 模块 ,请在 Node 参数 字段中添加
—experimental-vm-modules标志。
通过运行/调试配置运行测试
从配置列表中选择 Jest 运行/调试配置,然后在列表或工具栏中点击
 。
监控测试执行并在 测试运行器 选项卡的 运行 工具窗口中分析测试结果。 有关详细信息,请参阅 探索测试结果。
重新运行失败的测试
在测试结果工具栏上点击
。 PyCharm 将执行上一次会话中失败的所有测试。
要重新运行特定失败的测试,请在其上下文菜单中选择 。
有关详细信息,请参阅 重新运行测试。
在发生更改时自动重新运行测试(监视模式)
PyCharm 支持 watch 模式,一旦对测试相关的源文件进行任何更改,测试会自动重新运行。 因此,您只需修改代码,而无需手动重新运行测试或重新启动 Jest 运行/调试配置。
在 测试运行器选项卡中,按下 监视更改 切换按钮。

或者,在运行/调试配置的 Jest 选项 字段中添加
--watch标志;参见上文的 创建 Jest 运行/调试配置。
导航
使用 PyCharm,您可以在文件与相关测试文件之间跳转,或从 测试运行器选项卡 中的测试结果跳转到该测试。
借助 PyCharm,您可以在文件与相关测试文件之间跳转,以及在测试或套件的定义与其在 测试运行器选项卡中的结果之间跳转。
要在测试与其被测对象之间相互跳转,请在编辑器中打开该文件,并从上下文菜单中选择 或 ,或直接按 Ctrl+Shift+T。
要从测试结果跳转到测试定义,请在 测试运行器 选项卡中双击测试名称,或从上下文菜单中选择 ,或直接按 F4。 测试文件将在编辑器中打开,插入符号定位于测试定义处。
要从测试或套件的定义跳转到其在 测试运行器 选项卡中的结果,请在标记栏中点击
或
,并在列表中选择 在测试树中选择 <test_name>。

对于失败的测试,PyCharm 会根据堆栈跟踪将您定位到测试中的失败行。 如果堆栈跟踪中没有精确的代码行,将带您前往测试定义。

快照测试
PyCharm 与 Jest 的集成支持一项强大的功能:快照测试。
当您运行带有 .toMatchSnapshot() 方法的测试时,Jest 会在 __snapshots__ 文件夹中创建一个快照文件。 要从测试跳转到其相关的快照,请点击测试旁的标记栏中的 ,或在
.toMatchSnapshot() 方法的上下文菜单中选择所需的快照。

如果快照与渲染后的应用不匹配,测试会失败。 这表明要么是您代码中的某些更改导致了这种不匹配,要么是快照已过时,需要更新。
要了解导致这种不匹配的原因,请通过 测试运行器 选项卡右侧窗格中的 点击以查看差异 链接打开 PyCharm 内置的 差异查看器。

您可以直接在 运行 工具窗口的 测试运行器 选项卡中更新过时的快照。
要更新特定测试的快照,请使用测试名称旁的 点击以更新快照 链接。
要更新文件中测试的所有过时快照,请使用测试文件名旁的 点击以更新失败的快照。

调试测试
借助 PyCharm,您可以直接在编辑器中快速开始调试单个 Jest 测试,或创建运行/调试配置来调试部分或全部测试。
设置断点 (按需)。
要从编辑器开始调试单个测试,请在标记栏中点击
或
,并在列表中选择 调试 <test_name>。
要开始调试文件夹中的所有测试,请在 项目 工具窗口中选择该文件夹,然后在上下文菜单中选择 调试 '位于 <folder name> 的测试'。

要通过运行/调试配置启动测试调试,请创建 Jest 运行/调试配置 如上所述。
然后在配置列表中选择 Jest 运行/调试配置,并在列表或工具栏中点击
 。
在打开的 调试工具窗口 中,按常规方式进行操作: 逐步执行程序、 停止并恢复程序执行、 在暂停时进行检查 、查看调用堆栈和变量、设置监视、对变量求值、 查看实际 HTML DOM ,等等。
监控代码覆盖率
借助 PyCharm,您还可以监控您的代码有多少 由 Jest 测试覆盖。 PyCharm 会在专用的 覆盖率 工具窗口中显示该统计信息,并在编辑器以及 项目 工具窗口(Alt+1 )中以可视方式标记已覆盖和未覆盖的行。
使用覆盖率运行测试
在 Docker 容器内使用 Node.js 运行 Jest 测试
借助 PyCharm,您可以在 Docker 容器内以与本地相同的方式运行 Jest 测试。
在开始之前
在 设置 | 插件 页的 Marketplace 选项卡上安装 Node.js 和 Node.js Remote Interpreter 插件,具体请参见 从 JetBrains Marketplace 安装插件。
请确保在设置中已启用 Docker 插件。 按 Ctrl+Alt+S 打开设置,然后选择 。 点击 已安装 选项卡。 在搜索字段中输入 Docker。 有关插件的更多信息,请参见 管理插件。
下载、安装并配置 Docker ,如 Docker.
在 Docker 中配置 Node.js 远程运行时 ,或通过 Docker Compose ,并在您的项目中 将其设置为默认。 还要确保与此远程运行时关联的包管理器已 设为项目默认值。
打开您的 package.json ,并确保在
devDependencies部分中列出了 Jest:{ "name": "node-express", "version": "0.0.0", "private": true, "dependencies": { "cookie-parser": "~1.4.4", "debug": "~2.6.9", "express": "~4.16.1", "http-errors": "~1.6.3", "morgan": "~1.9.1", "pug": "^3.0.2" }, "devDependencies": { "eslint": "^8.1.0", "http-server": "^14.0.0", "jest": "^27.3.1" } }右键点击编辑器中的任意位置,并从上下文菜单中选择 运行 '<package manager> install'。

