【问题标题】:NodeJS, WebStorm and Jasmine: ReferenceError: describe is not defined when debuggingNodeJS、WebStorm 和 Jasmine:ReferenceError:describe is not defined 调试时
【发布时间】:2021-09-25 23:34:00
【问题描述】:

我正在尝试调试一些使用 WebStorm 2016.1.2 编写的 Jasmine 测试。

我的测试代码如下所示:

var should = require("should");
var myLib = require("../my-lib");

describe("Scenario", () => {
    it("works as expected", () => {
        myLib.do().should.not.throw()
    });
});

我的目录结构如下:

│
├───node_modules
│   ├───.bin
│   ├───aws-sdk
│   │   └───<snip>
│   ├───jasmine
│   │   └───<snip>
│   ├───jasmine-core
│   │   └───<snip>
│   ├───karma
│   │   └───<snip>
│   ├───karma-jasmine
│   │   └───<snip>
│   ├───should
│   │   └───<snip>
│   └───sinon
│       └───<snip>
├───spec
│   ├───support
│   │   └───jasmine.json
│   └───my-lib.spec.js
└───my-lib.js

我在 WebStorm 中的 NodeJS 设置如下所示:

要调试,我只需按 F5 并选择要运行的 my-lib.spec.js 文件。然后我得到以下堆栈跟踪:

"C:\Program Files (x86)\JetBrains\WebStorm 2016.1.2\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" --debug-brk=22714 my-lib.spec.js
Debugger listening on port 22714
c:\Users\<me>\WebstormProjects\my-lib\spec\my-lib.spec.js:4
describe("Scenario", () => {
^

ReferenceError: describe is not defined
    at Object.<anonymous> (c:\Users\<me>\WebstormProjects\my-lib\spec\<my-lib>.js:4:1)
    at Module._compile (module.js:410:26)
    at Object.Module._extensions..js (module.js:417:10)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Module.runMain [as _onTimeout] (module.js:442:10)
    at Timer.listOnTimeout (timers.js:92:15)

Process finished with exit code 1

如果有人知道如何让 WebStorm 认识到 Jasmine 是全局安装的,那就太好了。

编辑:我已经按照 lena 的建议设置了 Karma 运行配置,配置如下:

当我按 F5 运行此程序时,Chrome 浏览器弹出并显示为空白(我安装了适用于 Chrome 的 JetBrains 插件)

【问题讨论】:

  • 你不应该和应该一起使用摩卡吗?
  • 你能要求('jasmine');在测试文件中?
  • 你能弄明白吗?
  • 从@lena 的回答中,我开始使用 Karma 来实现它。

标签: javascript node.js jasmine webstorm


【解决方案1】:

您正在使用 Node.js 运行配置来运行您的测试 - 而 Node 对您的测试框架一无所知。您应该使用测试运行程序(例如,业力 - 因为您安装了业力)。尝试使用业力运行配置。见https://confluence.jetbrains.com/display/WI/Running+JavaScript+tests+with+Karma

顺便说一句,如果你喜欢用应该与业力,试试karma-should

【讨论】:

    【解决方案2】:

    尝试使用jasmine-node 模块。

    这取决于你按 F5 时发送到 js 文件的命令。它必须是 jasmine-node &lt;test files&gt; 而不是 node &lt;test files&gt;

    尝试在控制台/终端中执行此操作,看看它是否有效。可能是网络风暴发送了错误的命令。

    如果你还没有安装 jasmine 节点,你可以这样做

    npm install jasmine-node -g

    【讨论】:

    • jasmine-node 很久没更新了,不支持最新版的Jasmine。
    【解决方案3】:

    使用mocha test.js,而不是node test.js

    【讨论】:

      【解决方案4】:

      为了找到这个问题的答案,我在我的项目根目录上运行了 DiffMerge,并在 Webstorm 中创建了一个新的 Angular CLI 项目,该项目正确地检测到了 jasmine 类型。

      我发现我的项目中的tsconfig.jsontsconfig.spec.json 文件定义了typeRootstypes,而另一个项目没有。

      typeRoots 选项的行为是:

      如果指定了 typeRoots,则只包含 typeRoots 下的包。

      Types 的行为方式类似。

      Typescript 文档接着说:

      默认情况下,所有可见的“@types”包都包含在您的编译中。任何封闭文件夹的 node_modules/@types 中的包都被认为是可见的。

      所以,对于我的项目,这种行为对我来说已经足够好了。从我的tsconfig.jsontsconfig.spec.json 文件中删除typeRootstypes立即解决了这个问题。

      【讨论】:

        【解决方案5】:

        在您的主文件夹中,有一个“package.json”文件。 打开它,你会看到这样的东西:

        {
          "name": "prep",
          "version": "1.0.0",
          "main": "server/server.js", //This can be different
          "scripts": {
            "lint": "eslint .",
            "start": "node .",
            "posttest": "npm run lint && nsp check"
          }, ....
        

        然后在“start”之后添加以下内容:“node.”,=>“test”:“jasmine”。 它应该是这样的:

        {
          "name": "prep",
          "version": "1.0.0",
          "main": "server/server.js",
          "scripts": {
            "lint": "eslint .",
            "start": "node .",
            "test": "jasmine",
            "posttest": "npm run lint && nsp check"
          },....
        

        然后在终端运行'npm test'

        【讨论】:

          猜你喜欢
          • 2021-04-16
          • 1970-01-01
          • 1970-01-01
          • 2022-09-29
          • 1970-01-01
          • 1970-01-01
          • 2018-12-12
          • 2020-12-09
          • 2022-11-10
          相关资源
          最近更新 更多