【问题标题】:Eslint angular and jasmine: is not defined no-undefEslint angular 和 jasmine:未定义 no-undef
【发布时间】:2023-03-12 09:28:01
【问题描述】:

我正在尝试使用 angular、eslint:recommended 和 jasmine 插件推荐的设置来整理我的 angular 代码。但是我得到的不是茉莉花东西上的定义错误。 我的 eslint 文件如下所示:

{
  "plugins": ["jasmine"],
  "extends": ["angular", "eslint:recommended", 
  "plugin:jasmine/recommended"],
  "rules": {
   "quotes": [ 2, "single"],
   "strict": [2, "global"],
   "semi": ["error", "always"],
   "angular/on-watch": "warn"
  }
}

我收到以下错误:

3:1 错误“描述”未定义 no-undef

4:5 错误“它”未定义 no-undef

5:9 错误 'expect' 未定义 no-undef

7:5 错误“它”未定义 no-undef

8:9 错误 'expect' 未定义 no-undef

在我的package.json 中,eslint 的版本为 2.3.0eslint-plugin-jasmine 的版本为 1.8.1。我也有版本 0.5.0 for eslint-config-angular1.0.0 for eslint-plugin-angular

我也尝试过在我的eslint 文件中不指定"plugins": ["jasmine"],但是我收到一个错误消息,告诉我没有定义茉莉花规则(例如Definition for rule 'jasmine/no-focused-tests' was not found)。

【问题讨论】:

    标签: angularjs jasmine eslint


    【解决方案1】:

    添加

    "env": {
     "jasmine": true
    }
    

    解决了这个问题。这是我通过eslint jasmine插件的github页面得到的建议。

    【讨论】:

    • 对于那些对所有配置文件感到困惑的人(就像我一样):设置转到eslintrc
    • 它位于,eslintrc.json的顶层
    【解决方案2】:

    设置this rule 后,任何未显式声明的变量都会导致警告。 您可以在 spec 文件的顶部设置:

    /* global describe it expect */
    

    【讨论】:

    • 嘿,这行得通。但我认为把那行放在我所有的测试文件中是相当难看的。我以为那是茉莉花插件修复的东西?有没有另一种方法可以让我把它放在一个地方并将它应用于我的所有规范文件?
    • 规则正在发挥作用:警告您使用全局变量。您可以在对 .spec 文件进行 linting 时禁用此规则(使用 .spec 和代码的单独设置运行 eslint。或者不要在您的 spec 文件上使用 linting。或者完全禁用此规则。
    【解决方案3】:

    我发现为所有 Jasmine 函数配置验证并在一个地方进行验证,但在“非规范”文件中使用它们时仍然标记它们的方式如下。

    在配置级别定义通用配置。然后,对那些特定的配置(例如 Typescript 或 Jasmin)进行覆盖。这样,“全局配置”仅适用于特定文件。

    {
        "env": {
            "jasmine": true
        },
        "files": ["**/*.spec.js"]
    }
    

    .eslintrc.js的片段:

    /**
     * @type {import("eslint").Linter.Config}
     */
    module.exports = {
        "env": {...},
        "extends": [
            "eslint:recommended"
        ],
        "overrides": [
            {
                "extends": [
                    "plugin:@typescript-eslint/eslint-recommended",
                    "plugin:@typescript-eslint/recommended"
                ],
                "files": ["**/*.ts"],
                "parser": "@typescript-eslint/parser",
                "parserOptions": {
                    "project": "tsconfig.json",
                    "tsconfigRootDir": __dirname
                },
                "plugins": [
                    "@typescript-eslint"
                ]
            },
            // This is the important part
            {
                "env": {
                    "jasmine": true
                },
                "files": ["**/*.spec.js"] 
            }
        ],
        "root": true,
        "rules": {...}
    };
    

    【讨论】:

      【解决方案4】:

      您可以将/* eslint-env jasmine */ 添加到您的.spec.ts 文件的顶部。这与 Geert 提出的解决方案基本相同,但采用了每个文件的解决方案。细微的差别在于,在非测试文件中使用一些全局定义的测试方法(如describe()it())仍然是错误的。

      (可能有一种设置 ESLint 的巧妙方法,这样您就不必将此行添加到所有 .spec.ts 文件中。)

      【讨论】:

        猜你喜欢
        • 2018-07-13
        • 2017-10-29
        • 2021-02-28
        • 1970-01-01
        • 1970-01-01
        • 2020-06-29
        • 2021-10-16
        • 2018-06-09
        相关资源
        最近更新 更多