Eslint angular和jasmine:is not defined no-undef未定义

23

我正在尝试使用angular、eslint:recommended和推荐的jasmine插件设置来对我的angular代码进行lint。然而,我在jasmine相关部分遇到了is not defined错误。 我的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 错误 'describe' 未定义 no-undef

4:5 错误 'it' 未定义 no-undef

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

7:5 错误 'it' 未定义 no-undef

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

在我的 package.json 中,我为 eslinteslint-plugin-jasmine 指定了版本号分别为 2.3.01.8.1。我还为 eslint-config-angulareslint-plugin-angular 指定了版本号分别为 0.5.01.0.0

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


对于Angular,请使用全局变量,就像这个答案https://dev59.com/t1gR5IYBdhLWcg3wO7XX#41552223所示。 - None
4个回答

45

添加

"env": {
 "jasmine": true
}

问题已解决。这是我在eslint jasmine插件的Github页面上得到的建议。


4
对于那些被所有配置文件搞糊涂的人(就像我一样):设置应该放在eslintrc中。 - c_froehlich
1
它位于顶层的,eslintrc.json文件中。 - Sandro

7
我找到的方法是在一个地方配置所有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": {...}
};

3

使用此规则,任何未显式声明的变量都会引发警告。 您可以在spec文件顶部设置:

/* global describe it expect */

2
嗨,这个可以工作。但我认为在所有测试文件中放置那行代码非常丑陋。我以为这是Jasmine插件可以解决的问题?有没有其他方法可以将其放在一个地方,并应用于所有我的规范文件? - Geert Olaerts
这个规则正在发挥作用:警告您使用全局变量。当对.spec文件进行linting时,您可以禁用此规则(使用单独的设置运行eslint以针对.spec和代码)。或者在spec文件上根本不使用linting。或者完全禁用此规则。 - Bruno Garcia

2
您可以在您的.spec.ts文件顶部添加/* eslint-env jasmine */。这基本上与Geert提出的解决方案相同,但具有文件级别的解决方案。微妙的差异是,在非测试文件中仍将使用一些全局定义的测试方法(如describe()it())将导致错误。 (可能有一种聪明的方式设置ESLint,以便您不必在所有.spec.ts文件中添加此行。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接