gpt4 book ai didi

eslint - 配置 ESLint RuleTester 以使用 Typescript Parser

转载 作者:行者123 更新时间:2023-12-03 14:38:27 28 4
gpt4 key购买 nike

我正在尝试为我的基于 typescript 的项目编写一些自定义 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 代码。我知道我需要以某种方式配置它以使用允许它理解/解析 typescript 代码的自定义解析器。但是我无法在网上找到一个很好的例子来说明如何做到这一点

最佳答案

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

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'),
});

关于eslint - 配置 ESLint RuleTester 以使用 Typescript Parser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60111945/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com