【问题标题】:Mocha and ts-node gives 'Unsupported Args'Mocha 和 ts-node 给出“不支持的参数”
【发布时间】:2021-12-27 13:44:54
【问题描述】:

在我的package.json 中我定义了我的测试脚本:

"scripts": {
    "test": "mocha --require ts-node/register ./test/**/*.ts",
    "build": "npx tsc"
}

当我运行 npm test 时,我得到了结果:

> mocha --require ts-node/register ./test/**/*.ts

error:   Unsupported Args: --require ts-node/register ./test/**/*.ts

这似乎是命令交互。即使我手动运行它node .\node_modules\mocha\bin\mocha --require ts-node/register "./test/**/*.ts" 它也会失败并显示相同的消息。如果我删除 --require ts-node/register 它会运行,但在对 import 语句运行测试时会失败,因为我的测试文件是 Typescript 文件。

如何让 mocha 与 ts-node 一起工作?

【问题讨论】:

  • 这个命令应该可以工作,一切都很好。这意味着其他地方出了问题(可能是摩卡的错误版本?),我们没有看到全貌。
  • 我使用的是 mocha 9.1.3 和 ts-node 10.4.0。我正在使用 CommonJS 模块类型。除了我的脚本调用之外,没有与这两个模块相关的配置或其他设置。怀疑这可能是 Windows 命令参数处理的错误。
  • 不,不是这样。刚刚在 Linux 机器上尝试过,它给出了相同的响应。
  • a section in ts-node's readme,专门用于摩卡咖啡。它不直接回答问题,但可能有用。你看过了吗?
  • 是的,我查看了 ts-node 和 mocha 以了解如何一起使用它们。即使复制您链接mocha --require ts-node/register --extensions ts,tsx --watch --watch-files src 'tests/**/*.{ts,tsx}' 的完全相同的行,它也会正确给出:Error: No test files found: "tests/**/*.{ts,tsx}" 但是当我从tests 更改为test 以获取有效路径时,我会返回相同的错误Unsupported Args ......

标签: node.js mocha.js ts-node


【解决方案1】:

我无法找到如何使用命令行解决问题的答案,但我通过将选项移动到 package.json 中绕过了该问题

"scripts": {
    "test": "mocha"
},
"mocha": {
    "extension": ["ts"],
    "spec": "test/**/*.ts",
    "require": "ts-node/register"
}

更新:我发现了错误。我正在将一些未经测试的代码转移到进行测试。记录器是在 main.ts 文件中定义的,该文件中有一些运行的代码没有受到任何保护。事实上错误Unsupported Args 是我自己的错误信息。

引用 winston 记录器的行为导致 main.ts 中的代码运行。由于某种原因,现在 mocha 选项在 package.json 中不会发生此错误,即使仍然引用了记录器,这让我感到困惑。我不确定为什么选项是直接在命令行中,还是在 package.json 中会导致这种行为差异。无论如何,吸取的教训永远不会引用到您的主要“运行”模块中。

【讨论】:

    【解决方案2】:

    我的package.json 文件在scripts 中有它

    "scripts": {
            "test": "./node_modules/mocha/bin/mocha -r ts-node/register tests/test.ts"
        },
    

    在这之后我可以运行npm test,一切似乎都很好。

    devDependencies 中的版本:

    "devDependencies": {
        "@types/chai-http": "^4.2.0",
        "@types/expect": "^24.3.0",
        "@types/mocha": "^9.0.0",
        "@types/chai": "^4.2.18",
        "@types/node": "14.14.30",
        "chai": "^4.3.4",
        "mocha": "^9.1.3",
        "ts-node": "^9.1.1",
        "typescript": "^4.4.4"
    }
    

    【讨论】:

    • 我尝试重建一个新项目并逐部分复制我的代码。您的工作很好,直到我复制了一些可以(但永远不会)调用 winston 记录器的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 2019-09-22
    • 2020-09-16
    • 2022-07-23
    • 1970-01-01
    • 2020-01-24
    • 2019-05-31
    相关资源
    最近更新 更多