记一次mocha调试报错

1,159 阅读2分钟

mocha是现在最流行的JavaScript测试框架之一,在浏览器和Node环境都可以使用。

一般情况下可以,使用mocha测试时会在全局安装mocha,在项目根目录的test文件夹下创建测试文件,在其内编写测试代码,然后在项目根目录下运行mocha命令来进行测试。

但是有一天,我在VSCode中调试mocha测试用例的时候,却报了一个如下图所示的错误。当时在网上下载了一个用来学习js中this的绑定的项目,因为在《你不知道的JavaScript·卷一》中得知可以通过观察调用栈得到this被绑定到了哪里,就添加了如下代码使VSCode支持调试mocha测试,兴冲冲地打好了断点,点击绿色三角按钮开始调试,在调试控制台中得到了如前面所述的错误。

{
  // 使用 IntelliSense 了解相关属性。 
  // 悬停以查看现有属性的描述。
  // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Mocha Tests",
      "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
      "args": [
        "-u",
        "tdd",
        "--timeout",
        "999999",
        "--colors",
        "${workspaceFolder}/test"
      ],
      "internalConsoleOptions": "openOnSessionStart"
    }
  ]
}

describe.png

刚开始以为是因为网络原因mocha模块下载不全,导致describe未找到,删除安装了很多次,依然是报同样的错误。在项目的根目录下执行mocha命令会执行成功,并不会报图中的这个出错信息。这说明是VSCode配置的问题,但是当时并没有认识到是这样的,于是将主要的报错信息复制到浏览器里面在网络中查找起来,看了很多篇文章都没有找到问题的答案。后来在一个网页中发现了tdd bdd mocha这几个关键词,然后再去VSCode调试配置里面看了一下,将tdd改成bdd之后,再执行就可以正常调试了。

这使我感到好奇,之前就听说过tdd和bdd,但对他们的了解不是很深刻,只知道在mocha测试文件中可以引入具有bdd风格的断言模块,从未想过mocha设计时符合tdd或bdd的概念。

后来看到一位网友的文章后,找到了问题的原因所在,原来用mocha测试时可以使用-u参数指定测试用例的组织模式,describe和it由bdd接口提供,tdd接口里面并没有提供这些方法,刚开始的调试配置使用了tdd,所以调试会报describe未被找到这个错误。

参考文章: