【问题标题】:Mocha TS tests fail with `npm test` but not if run directlyMocha TS 测试因“npm test”而失败,但如果直接运行则不会
【发布时间】:2017-05-15 12:17:19
【问题描述】:

在我的 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 的正确变体是什么?

【问题讨论】:

    标签: node.js typescript mocha.js


    【解决方案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 安装。

    【讨论】:

    • 你一针见血。我以为我有 ts-node 作为开发依赖项,但实际上并没有检查。添加后,一切都开始使用 npm。
    • 很高兴它帮助了你 ;)
    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2022-11-03
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多