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"
}
]
}

刚开始以为是因为网络原因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未被找到这个错误。
参考文章:
- Mocha中文文档 segmentfault.com/a/119000001…