Mocha TS测试用`npm test`失败,但如果直接运行则没有

时间:2016-12-31 14:21:38

标签: node.js typescript mocha

在我的nodejs项目中(用Typescript编写)我可以用这个命令运行我的测试:

mocha --compilers ts:ts-node/register,tsx:ts-node/register

他们成功了。我还在package.json文件中使用了这个命令,以便

npm test

以相同的方式运行它们,但在这种情况下,我得到:

Mikes-iMac:antlr4-graps mike$ npm test

> mocha --compilers ts:ts-node/register,tsx:ts-node/register

module.js:472
    throw err;
    ^

Error: Cannot find module 'ts-node/register'
    at Function.Module._resolveFilename (module.js:470:15)

我的package.json文件包含:

  "scripts": {
    "test": "mocha --compilers ts:ts-node/register,tsx:ts-node/register"
  },

  "devDependencies": {
    "@types/chai": "^3.4.34",
    "@types/mocha": "^2.2.32",
    "@types/node": "^6.0.40",
    "chai": "^3.5.0",
    "mocha": "^2.5.3",
    "typescript": "^2.0.3",
    "vscode": "^1.0.0"
  },

通过npm运行mocha的正确变体是什么?

1 个答案:

答案 0 :(得分:1)

问题在于,无论如何,但一般npm run <script>npm test特别会使用/bin/sh运行命令,而不是当前的shell,这可能是不同的。

由于您的依赖项中没有ts-node,我认为它已全局安装。根据您安装Node.js的方式,/bin/sh可能最终使用与当前shell不同的Node.js安装,因此没有相同的全局安装包。

如果我说得对,这两个命令会产生不同的结果:

$ which node
$ /bin/sh -c 'which node'

两种可能的解决方案:

  1. ts-node添加到您项目的devDependenciesnpm install
  2. 确保/bin/sh使用与当前shell相同的Node.js安装。