【问题标题】:Configure ESLint RuleTester to use Typescript Parser配置 ESLint RuleTester 以使用 Typescript Parser
【发布时间】:2020-05-23 12:02:07
【问题描述】:

我正在尝试为我的基于打字稿的项目编写一些自定义 ESLint 规则。在我的项目中,我使用 eslint/typescript 进行 linting。

我已经编写了一个自定义 eslint 插件来验证自定义规则。现在我想为该自定义规则编写单元测试。我的测试文件如下所示:

/**
 * @fileoverview This rule verifies that logic can only depend on other logic
 * @author Dayem Siddiqui
 */
"use strict";

//------------------------------------------------------------------------------
// Requirements
//------------------------------------------------------------------------------
const typescriptParser = require('@typescript-eslint/parser')
var rule = require("../../../lib/rules/logic-dependency"),
  RuleTester = require("eslint").RuleTester;

//------------------------------------------------------------------------------
// Tests
//------------------------------------------------------------------------------
typescriptParser.parseForESLint()
var ruleTester = new RuleTester({ parserOptions: {} });
ruleTester.run("logic-dependency", rule, {
  valid: [
    `class DeleteLogic {

        }
    class CreateLogic {
            constructor(private deleteLogic: DeleteLogic) {}
    }`
  ],

  invalid: [
    {
      code: `class ExternalClient {

            }
            
            class UpdateLogic {
                constructor(private externalClient: ExternalClient) {}
            }`,
      errors: [
        {
          message: "Logic cannot have a dependency on client",
          type: "MethodDefinition"
        }
      ]
    }
  ]
});

现在我的测试失败了,因为默认情况下 eslint 只理解普通的 Javascript 代码。我知道我需要以某种方式将其配置为使用允许它理解/解析打字稿代码的自定义解析器。但是我无法在网上找到一个很好的例子来说明如何做到这一点

【问题讨论】:

    标签: eslint typescript-eslint


    【解决方案1】:

    使用诸如typescript-eslint/parser 之类的包。在这种情况下,我只能提供一个链接。如果您在使用它时需要帮助,请告诉我。

    【讨论】:

    • 除了写一个全新的解析器,别无选择。
    【解决方案2】:

    RuleTester 构造函数采用 eslint 的 parser options,允许配置 parser itself。所以像这样传递它,Bob 就是你的叔叔:

    const ruleTester = new RuleTester({
      parser: '@typescript-eslint/parser',
    });
    

    typescript-eslint 自己的规则测试(例如this one)正是使用这个。

    (正在寻找这个问题的答案并一直在这里结束,所以我在这里发布了我找到的解决方案,希望它会有用。)


    eslint 6.0+

    结合@Sonata的评论:

    Eslint 6.0+ 需要解析器的绝对路径(参见6.0 migration guide):

    const ruleTester = new RuleTester({
      parser: require.resolve('@typescript-eslint/parser'),
    });
    

    【讨论】:

    猜你喜欢
    • 2020-02-18
    • 2021-06-01
    • 2021-11-01
    • 2020-09-09
    • 2020-11-10
    • 2020-12-26
    • 1970-01-01
    • 2020-12-09
    • 2021-08-16
    相关资源
    最近更新 更多