如何安装和运行 Node.js 测试模块 Mocha?在安装后出现 "mocha: command not found" 错误。

112
我遇到了使用 Mocha 的问题,希望它能按照文档所述正常工作,但实际上并没有太多关于如何让它运行的文档。
我已经使用 npm 进行了安装(全局和本地都尝试过),每次运行时都会出现以下情况:
$ mocha
mocha: command not found

好的,我发现它不在我的PATH中,所以我尝试直接运行它。

$ ./node_modules/mocha/bin/mocha 
execvp(): No such file or directory

最后,我尝试点击另一个bin文件,结果得到:
$ ./node_modules/mocha/bin/_mocha 
path.existsSync is deprecated. It is now called `fs.existsSync`.

  .

  ✔ 1 tests complete (1ms)

我该如何用一个单一的命令执行我的测试?Vows似乎可以做到,但我听说Mocha是更好的选择,只是我似乎无法正确地使用它。
对于我在第三次尝试中遇到的错误,你有什么想法吗?
编辑:
我正在运行:
- Ubuntu 11.10 64位 - Node.js 0.7.5 - npm 1.1.8 - mocha 0.14.1 - should 0.6.0

2
使用node 0.6.12,npm 1.1.4,并执行“npm install mocha”,我得到了预期的“./node_modules/.bin/mocha”。使用“sudo npm install -g mocha”可以得到“/usr/local/bin/mocha”。如果在您的环境中无法正常工作,则可能是一个错误,或者只是mocha没有更新以支持node 0.7.*。关于您的弃用警告,“exists”和“existsSync”已从node 0.7.1中的“path”移动到“fs”。 - Linus Thiel
我降级到了 Node.js 0.6.12 版本,将 "./node_modules/.bin" 添加到了我的 PATH 中,现在一切都正常了。 - Stephen Melrose
6个回答

206

自从npm 5.2.0版本以来,npm新增了一个名为"npx"的命令,使用它可以更轻松地实现这个功能。如果你运行以下命令:

npx mocha <args>

注意:可选参数将被转发到正在执行的命令(在本例中为mocha)

这将自动从你本地安装的mocha中选择可执行的“mocha”命令(始终将其添加为dev依赖项,以确保你和其他人始终使用正确的版本)。

但是要小心,如果你没有安装mocha,该命令将自动获取并使用最新版本,这对于某些工具(例如脚手架)非常有用,但可能不是对于某些依赖项最推荐的做法,因为你可能需要固定到特定的版本。

你可以在这里阅读更多关于npx的内容。


现在,如果你想定义一个自定义的npm脚本,一个可能会调用其他npm二进制文件的别名......

你不希望你的库测试由于机器设置(全局的mocha、全局的mocha版本等)而失败,使用跨平台的本地mocha的方法是:

node node_modules/.bin/mocha

npm将你的依赖项中所有二进制文件的别名放置在特定文件夹中。最终,当运行npm脚本时,npm会自动将node_modules/.bin添加到PATH中,因此在您的package.json中,您只需要这样做:


"scripts": {
  "test": "mocha"
}

使用以下方式调用该函数:

npm test

8
@michael.kebe 不需要指定路径来使用本地的mocha,npm已经将"./node_modules/.bin"添加到$PATH中,因此默认情况下将使用本地版本。 - Benja
我认为正确的命令应该是 node node_modules/mocha/bin/mocha 而不是 node node_modules/.bin/mocha。 - Mina Luke
3
@MinaLuke 这也能行,但这是个不好的主意。/node_modules/.bin/{module-binary-name} 是 npm 将你依赖的二进制文件放置快捷方式的位置,你不应该直接引用一个依赖中的源文件,因为那样可能会在下一版本中出现问题。 - Benja

18

进一步阅读并得到Linus G Thiel的确认后,我发现我只需要:

  • 降级到Node.js 0.6.12
  • 然后,要么
    • 全局安装Mocha
    • ./node_modules/.bin添加到我的PATH

4
我已经在全局和本地分别安装了 Node 0.8.12 和 Mocha(用于不同的项目),它们都能正常工作。因此无需降级 Node。对于本地安装的 Mocha,只需确保你的 PATH 设置正确,或者直接从你的脚本(Makefile 或者 "scripts" 标签)调用它即可。 - Qichao Dong
1
我在本地和全局都安装了Mocha,但是它在路径中找不到(Win8)。我不得不手动将相对于我的项目的'./node_modules/.bin'文件夹添加到我的PATH中,重新启动控制台,然后输入'mocha'才能正常工作。虽然不理想,但这是一个快速的解决方法。也许如果你有一个顶级位置来安装本地的mocha,然后链接到该路径,这样你就可以在其他地方使用它。 - Ali

5
为了在终端上使用mocha命令运行Mocha,您需要在本机全局安装mocha
npm install --global mocha

然后使用cd命令进入projectFolder/test目录并运行mocha yourTestFileName.js


如果你想将mocha作为开发依赖添加到你的package.json文件中:

npm install --save-dev mocha

然后,在package.json中的脚本中添加mocha

"scripts": {
    "test": "mocha"
  },

然后在您的终端里运行npm test


2
在安装mocha的node模块时,我尝试了以下命令:
  • npm install
  • npm install mocha
  • npm install --save-dev mocha
  • npm install mocha -g # 也可以全局安装
在运行或执行mocha测试时,我尝试了以下命令:
  • mocha test
  • npm run test
  • mocha test test\index.test.js
  • npm test
但是,我收到以下错误信息:

'Mocha' 不是内部或外部命令

因此,在尝试了一切后,结果只需要将路径设置为环境变量系统变量下的:

C:\Program Files\nodejs\

然后就可以工作了 :)

我知道这是一条旧评论,但我成功地安装了Mocha。谢谢Dheeraj。 - Bubbles

1
晚回答了,但我认为这个方法可行。
安装全局的mocha。
npm install --global mocha

如果您已经安装了mocha,则设置bin路径。

1
对于 Windows:

Package.json

  "scripts": {
    "start": "nodemon app.js",
    "test": "mocha"
  },

然后运行以下命令:
npm run test

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接