我正在尝试使用 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 错误“it”未定义 no-undef
5:9 错误“expect”未定义 no-undef
7:5 错误“it”未定义 no-undef
8:9 错误“expect”未定义 no-undef
在我的
package.json
中,我有 2.3.0
的版本 eslint
和 1.8.1
的 eslint-plugin-jasmine
。我还有 0.5.0
的版本 eslint-config-angular
和 1.0.0
的 eslint-plugin-angular
。
我也尝试过在我的
"plugins": ["jasmine"]
文件中不指定 eslint
,但随后我收到一条错误消息,告诉我茉莉花规则未定义(例如 Definition for rule 'jasmine/no-focused-tests' was not found
)。
添加
"env": {
"jasmine": true
}
解决了问题。这是我通过 eslint jasmine 插件的 github 页面得到的建议。
我发现为所有 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": {...}
};
设置此规则后,任何未显式声明的变量都会引发警告。
您可以在 spec 文件顶部设置:
/* global describe it expect */
/* eslint-env jasmine */
添加到
.spec.ts
文件的顶部。这与 Geert 提出的解决方案基本相同,但采用的是每个文件的解决方案。细微的区别在于,在非测试文件中使用一些全局定义的测试方法(例如 describe()
和 it()
)仍然会出错。(可能有一种巧妙的方法来设置 ESLint,这样您就不必将此行添加到所有 .spec.ts
文件中。)
env
不再有效。 您必须在语言选项的
...globals.jasmine
对象中添加 globals
(在您的 eslint.config.mjs
配置文件中)。languageOptions: {
//...
globals: {
//...
...globals.jasmine
}
},