首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >配置ESLint RuleTester以使用Typescript解析器

配置ESLint RuleTester以使用Typescript解析器
EN

Stack Overflow用户
提问于 2020-02-07 18:49:36
回答 2查看 940关注 0票数 8

我正在尝试为我的基于typescript的项目编写一些自定义的ESLint规则。在我的项目中,我使用eslint/typescript进行线条处理。

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

代码语言:javascript
复制
/**
 * @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代码。我知道我需要以某种方式将其配置为使用自定义解析器,使其能够理解/解析typescript代码。然而,我在网上找不到一个好的例子来说明如何做到这一点

EN

回答 2

Stack Overflow用户

发布于 2020-03-08 02:40:02

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

代码语言:javascript
复制
const ruleTester = new RuleTester({
  parser: '@typescript-eslint/parser',
});

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

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

eslint 6.0+

结合@Sonata的评论:

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

代码语言:javascript
复制
const ruleTester = new RuleTester({
  parser: require.resolve('@typescript-eslint/parser'),
});
票数 6
EN

Stack Overflow用户

发布于 2020-02-22 02:04:15

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60111945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档