Logo
Section 1 / 2

调试 Node.js 单元测试

学习能够实现和促进调试的技术。

导入

调试 Node.js 单元测试

学习能够实现和促进调试的技术。

调试单元测试非常重要。以下是几种常用的调试技术。

运行单个测试

隔离单个测试可以帮助我们专注于该测试,确保正在调试的问题确实是由这个测试引起的。Jasmine 提供了 fit 功能,可以聚焦于单个测试并仅运行它,跳过其他所有测试。

1fit('这个是唯一会运行的测试', () => {...})

fit 也可以多次使用。如下所示:

1fit('这个是唯一会运行的测试', () => {...}) 2fit('这个是另一个会运行的测试', () => {...})

使用 console.log

console.log(及其兄弟方法 info、table 等)允许我们在测试执行的不同阶段输出状态和标记信息。请看下面的示例。

No configuration found for ID: eca66d2f2fdfa509f9c98a059fbbfdfdb58da7aca3bed5412f006edd2f144568

注意 src/days-ago.js 和 src/days-ago.spec.js 中的日志输出:

  • 1console.log('--------', 'ago', daysAgo, 'msAgo', agoMilliseconds);

    这行代码输出一个标记(使日志更易识别),然后用逗号分隔打印变量名及其值。

  • 1console.log('------------ 期望值为 7,实际得到', ago);

    这行代码在测试侧输出一个标记。

实时调试

我们可以使用支持 JavaScript 调试的调试器,包括浏览器以及 IDE 如 Visual Studio Code、WebStorm、IntelliJ 等。以下幻灯片提供了逐步演示:

在演示中,我们执行了以下步骤:

  1. 首先,在代码中添加 debugger 语句,以在指定位置暂停执行,从而检查应用的状态。

  2. 1node --inspect-brk ../node_modules/jasmine/bin/jasmine.js

    以调试模式(也称为检查模式)启动 Jasmine 脚本,并注意输出的 WebSocket 地址、端口和 id:Debugger listening on ws://127.0.0.1:9229/11bc3c5b-4703-4a09-926d-6f03d5c4ef00. --inspect-brk 表示调试服务器会在脚本的第一行中断并等待调试客户端(此处为浏览器)连接。

注意:在示例中,node_modules 的路径是上一级目录:../node_modules。通常情况下应为 ./node_modules,如下面示例所示。

  1. 接着,打开浏览器并访问 edge://inspect。对于 Chrome 浏览器,则使用 chrome://inspect。

  2. 在“Inspect”标签页中,选择显示的 Node 进程。该进程会根据默认配置自动列出:localhost 和端口 9229。点击“Configuration”按钮可添加其他地址或端口进行搜索,但使用其他端口(如 9876)似乎无效。

  3. 当浏览器(调试客户端)成功连接后,可以看到脚本的第一行,即 Jasmine 入口。

  4. 点击“Resume”按钮,继续执行到我们代码中的 debugger 语句。

  5. 此时已进入调试状态。在控制台中,可以添加或移除断点,并在当前作用域上下文中评估表达式。也就是说,无论脚本在哪里中断,都可以使用当前可见的变量进行计算。点击以下链接了解 Edge 和 Chrome 调试器的更多功能:

  6. 完成调试并让脚本正常运行结束后,调试服务器将等待调试客户端断开连接:Waiting for the debugger to disconnect.... 然后关闭 WebSocket 并退出。

调试练习

让我们自己动手运行调试器:

  1. 下载代码。
  2. 执行 npm i。
  3. 执行 node --inspect-brk ./node_modules/jasmine/bin/jasmine.js。
  4. 开始调试。

注意:代码中已经包含了一个 debugger 语句。

请从下方小部件下载练习代码,然后解压。

debug-nodejs-exercise.zip

练习

以下代码沙箱中存在一些失败的测试。请使用本课介绍的调试技术——fit、console 或调试器——来修复它们。注意:若要使用 debugger 语句,必须先下载代码。

我们将之前课程的一些测试集中在一起,使环境更复杂,更贴近真实场景下的测试调试。祝你好运,小心陷阱!

注意:如果选择下载代码,需在运行 node --inspect-brk .... 之前先执行 npm i。

No configuration found for ID: 4374ebd59365436cd8025968167c039742adaad01211fa8e4b09223a4e689568

有两个测试名称相同,调试第一个并不能修复第二个失败的测试。

有两个测试名称相同,调试第一个并不能修复第二个失败的测试。

请确认一天的毫秒数是否正确。例如,可以运行:
console.log('毫秒数是否正确', 246060*1000 === 84200000)

测试异步代码

调试浏览器中的 JavaScript 测试