ESLint无法识别node.js的"全局"对象

ban*_*ana 3 javascript unit-testing node.js eslint jestjs

错误:

3:5  error  'global' is not defined  no-undef
Run Code Online (Sandbox Code Playgroud)

我目前的ESLint配置:

module.exports = {
  parser: "babel-eslint",
  env: {
    browser: true,
    es6: true,
    "jest/globals": true,
    jest: true
  },
  extends: ["eslint:recommended", "plugin:react/recommended", "prettier", "prettier/react"],
  parserOptions: {
    ecmaFeatures: {
      experimentalObjectRestSpread: true,
      jsx: true
    },
    sourceType: "module"
  },
  globals: {
    testGlobal: true
  },
  plugins: ["react", "prettier", "jest"],
  rules: {
    "prettier/prettier": 1,
    "no-console": 0
  }
};
Run Code Online (Sandbox Code Playgroud)

导致ESLint错误的简化示例测试文件:

describe("Jest global:", () => {
  it("should not cause ESLint error", () => {
    global.testGlobal = {
      hasProp: true
    };
  });
});
Run Code Online (Sandbox Code Playgroud)

我期望通过env: { jest: true }在eslint配置中覆盖这个Jest功能.我当然可以禁用文件中的规则或行,但是每次使用时我都需要这样做global.

Mic*_*ngo 6

global对象是Node.js的一部分.它并不特定于Jest,因此它不包含在jest环境中.实际上,您正在Node中运行单元测试,并且您碰巧使用该global对象进行测试.通常,为特定库定义的全局变量是它们提供的全局变量,以便在不必导入它们的情况下使用它们更方便.反例是AVA,它要求您导入它而不是定义全局变量.

如果您还想将ESLint用于测试,则必须添加node环境.

env: {
  browser: true,
  es6: true,
  node: true,
  jest: true
},
Run Code Online (Sandbox Code Playgroud)