测试 Node.js
使用 PyCharm,您可以使用众多框架对 Node.js 应用程序进行测试。
当前页面描述了使用 内置 Node.js 测试运行器 或 Mocha 进行测试,Mocha 是一个 JavaScript 测试框架,特别适合执行异步测试场景。 您可以在 PyCharm 外部运行 Mocha 测试,查看按树形视图排列的测试结果,并从中轻松导航到测试源代码。 在编辑器中,测试旁边,PyCharm 会显示测试状态,并提供快速运行或调试的选项。
开始之前
内置 Node.js 测试运行程序
从版本 20 开始,Node.js 附带稳定版的 内置 Node.js 测试运行程序。 PyCharm 支持与内置测试运行程序集成,因此您无需安装和配置任何第三方框架即可运行测试。
也支持测试 TypeScript 代码,详情请参见 测试 TypeScript。
请确保您的计算机上安装了 Node.js 版本 20 或更高版本,并将其配置为 本地 Node.js 运行时。
按照 Node.js 官方网站 上的说明创建测试文件。
在装订区域:
点击单个测试旁边的
以运行它。
点击测试套件旁边的
以运行其中的所有测试。

在 运行 工具窗口中检查测试结果,详细信息请参阅 浏览测试结果。
重新运行测试:
要重新运行单个测试,请在 运行 工具窗口中选择它,并在其上下文菜单中选择 运行 '<test name>' ,或按 Alt+Shift+R。

或者,使用测试旁边的装订区域图标重新运行。 点击
、
或
可重新运行已忽略、失败或成功的测试。

要重新运行整个套件,请在 运行 工具窗口的工具栏上点击
。

或者,点击套件旁边的装订区域图标。

使用第三方测试框架测试您的代码
虽然您可以使用任意框架,但推荐使用 Mocha。
安装 Mocha
在嵌入式 终端 (Alt+F12 )中,输入以下命令之一:
npm install mocha:在项目中进行本地安装。npm install -g mocha:用于全局安装。npm install --save-dev mocha:将 Mocha 安装为 开发依赖。
有关详细信息,请参阅 Mocha 官方网站的入门。
安装 Chai 断言库 ,以高效替代 Node.js 标准 assert 函数。
在嵌入式 终端 (Alt+F12 )中,输入:
npm install --save-dev chai
编写 Mocha 测试
按照 Mocha 官方网站 的说明创建测试。
运行 Mocha 测试
使用 PyCharm,您可以直接在编辑器中快速运行单个 Mocha 测试,或者创建运行/调试配置来执行部分或全部测试。
从编辑器运行单个 Mocha 测试
在装订区域点击
或
,并从列表中选择 运行 <test_name>。

借助装订区域中的 测试状态 图标
和
,您还可以在编辑器中直接查看测试是通过还是失败。

创建 Mocha 运行配置
打开 运行/调试配置 对话框(主菜单中的 ),在左侧窗格中点击
,并从列表中选择 Mocha。 运行/调试配置:Mocha 对话框将打开。
指定要使用的 Node.js 运行时以及
mocha软件包的位置。指定应用程序的工作目录。 默认情况下, 工作目录 字段显示项目根文件夹。 要更改此预定义设置,请指定所需文件夹的路径。
可选:
配置在相关源文件发生更改时自动重新运行测试。 为此,请在 附加 Mocha 选项 字段中添加
--watch标志。指定要运行的测试。 这可以是特定的测试或套件、整个测试文件,或包含测试文件的文件夹。
您还可以定义模式,以仅运行匹配的文件中的测试,例如,
*.test.js。 如果测试文件存储在单独的文件夹中,例如, test ,请在相对于工作目录的模式中指定此文件夹的路径:./folder1/folder2/test/*.test.js选择要运行的测试所使用的 接口。
通过 Mocha 运行配置运行测试
从配置列表中选择 Mocha 运行/调试配置,然后在列表中或工具栏上点击
 。
在 运行 工具窗口的 测试运行程序 选项卡中监视测试执行并分析测试结果。 有关详细信息,请参阅 浏览测试结果。
使用 点击以查看差异 链接打开 差异查看器 ,并将实际结果与预期进行比较。
包含所选测试的文件名显示为链接。 点击此链接以跳转到源代码。
在 运行 工具窗口的 测试运行程序 选项卡中监视测试执行并分析测试结果。 有关详细信息,请参阅 浏览测试结果。


重新运行失败的 Mocha 测试
在测试结果工具栏上点击
。 PyCharm 将执行上一次会话期间失败的所有测试。

要重新运行特定失败的测试,请在其上下文菜单中选择 。

或者,点击失败的测试旁边装订区域中的
,并从列表中选择 。

有关详细信息,请参阅 重新运行测试。
导航
使用 PyCharm,您可以在文件与其相关的测试文件之间跳转,或从 测试运行器选项卡 中的测试结果跳转到该测试。
要在测试与其被测对象之间相互跳转,请在编辑器中打开文件,并从上下文菜单中选择 或 ,或按 Ctrl+Shift+T。
要从测试结果跳转到测试定义,请在 测试运行程序 选项卡中双击测试名称,或从上下文菜单中选择 ,或直接按 F4。 测试文件会在编辑器中打开,插入符号定位在测试定义处。
对于失败的测试,PyCharm 会根据堆栈跟踪将您定位到测试中的失败行。 如果堆栈跟踪中没有确切的行,PyCharm 会将您定位到测试定义处。
调试测试
如果测试由于原因不明而失败,您可以调试该测试,以确定测试是否已过时,或者您对源代码所做的更改是否破坏了应用程序的预期行为。
使用 PyCharm,您可以直接在编辑器中快速开始调试单个 Mocha 测试,或者创建运行/调试配置来调试部分或全部测试。
从编辑器开始调试单个测试
在您要调试的测试旁边的装订区域设置断点。 您可以通过在 运行 工具窗口中双击它,或按 F4 来跳转到失败的测试。
在装订区域点击
或
,并从列表中选择 调试 <test_name>。
在 调试 工具窗口,照常进行: 逐步执行程序, 停止并恢复 程序执行, 在暂停时进行检查 ,探索调用堆栈和变量,设置监视,计算变量, 查看实际 HTML DOM ,等等。

使用 Mocha 运行/调试配置调试测试
在您要调试的测试旁边设置断点。 您可以通过在 运行 工具窗口中双击它,或按 F4 来跳转到失败的测试。
创建 Mocha 运行/调试配置 如上所述。
从配置列表中选择 Mocha 运行/调试配置,然后在列表中或工具栏上点击
 。
在打开的 调试工具窗口 中,照常进行: 逐步执行程序, 停止并恢复 程序执行, 在暂停时进行检查 ,探索调用堆栈和变量,设置监视,计算变量, 查看实际 HTML DOM ,等等。
有关详细信息,请参阅 Debug failed tests。
监视代码覆盖率
使用 PyCharm,您还可以监视您的代码被 Mocha 测试覆盖的程度。 PyCharm 会在专用的 覆盖率 工具窗口中显示这些统计信息,并在编辑器和 项目 工具窗口中直观地标记已覆盖和未覆盖的行 Alt+1。 要监视覆盖率,您需要安装 nyc ,它是 Istanbul 的命令行界面。
安装 nyc
在嵌入式 终端 (Alt+F12 )中,输入:
npm install --save-dev nyc
使用覆盖率运行测试
在 Docker 容器内使用 Node.js 运行测试
使用 PyCharm,您可以在 Docker 容器内运行 Mocha 测试,就像在本地一样。
开始之前
在 设置 | 插件 页面, Marketplace 选项卡中安装 Node.js 和 Node.js Remote Interpreter 插件,如 从 JetBrains Marketplace 安装插件 中所述。
请确保在设置中已启用 Docker 插件。 按 Ctrl+Alt+S 打开设置,然后选择 。 点击 已安装 选项卡。 在搜索字段中,输入 Docker。 有关详细信息,请参阅 管理插件。
下载、安装并配置 Docker ,如 Docker
在 Docker 中配置 Node.js 远程运行时 ,或通过 Docker Compose ,并在您的项目中 将其设置为默认。 还请确保与此远程运行时关联的包管理器已 设置为项目默认。
打开您的 package.json 并确保所需的测试框架列在
devDependencies部分:{ "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": { "chai": "^4.3.4", "concurrently": "^6.3.0", "eslint": "^8.1.0", "http-server": "^14.0.0", "jest": "^27.3.1", "mocha": "^9.1.3", "nyc": "^15.1.0" } }右键点击编辑器中的任意位置,并从上下文菜单中选择 运行 '<package manager> install'。
运行测试
按照 Mocha 官方网站 的说明创建测试。
与本地开发相同地进行操作:您可以直接在编辑器中运行并调试单个测试,或者按照上文 运行测试 和 调试测试 中的说明创建运行/调试配置来启动部分或全部测试。

