stylelint 规则需要大量的测试。所以我们构建了一个专门的 stylelint 规则测试格式,以加速大规模生成一致,有效的规则测试。
我们有一个用于描述测试的架构,以及用于创建“规则测试工具”的函数,其使用测试框架(例如,tape 或 Mocha)来解析该架构。
开发插件时,您可以使用以下规则测试工具或创建自己的工具。
要使用您选择的规则测试程序,请执行以下操作:
// `testRule` = 导入的规则测试工具
testRule(rule, testGroupDescription)
rule 正是是您正在测试的规则(一个函数)。
testGroupDescription 是一个适合以下架构的对象。
每个测试组对象都描述了具有特定配置的特定规则的一组测试用例。
所需属性:
ruleName {string}:规则的名称。用于生成的测试用例描述。config {any}:此测试组的规则配置。应该与 .stylelintrc 中使用的规则配置格式相匹配。accept {array}:不应违反规则的测试用例的对象数组。每个对象都具有以下属性:
code {string}:要检查的 CSS 源码。description {string}:可选。 测试用例描述。only {boolean}:如果为 true,只运行这个测试用例。reject {array}:应该违反规则 的测试用例的对象数组。每个对象都具有以下属性:
code {string}:要检查的 CSS 源码。message {string}:预期违规的消息。line {number}:可选但推荐使用。 预期违规的行号。如果省略,则不会检查。column {number}:可选但推荐使用。 预期违规的列号。如果省略,则不会检查。description {string}:可选。 测试用例描述。only {boolean}:如果为 true,只运行这个测试用例。fixed {string}:如果测试架构启用了 fix,则为必需。 针对 code 属性自动修复的结果。可选属性:
syntax {"css"|"css-in-js"|"html"|"less"|"markdown"|"sass"|"scss"|"sugarss"}:默认为 "css"。其他设置使用特殊解析器。skipBasicChecks {boolean}:默认为 false。如果为 true,则不会执行一些基本检查(应该几乎总是包括在内)。您可以在 lib/testUtils/basicChecks.js 中查看它们。preceedingPlugins {array}:应该在测试 CSS 之前运行的 PostCSS 插件数组。fix {boolean}:默认为 false。如果为 true,则每个 reject 测试用例都将进行自动修复功能测试。如果规则具有自动修复,则为必需项。stylelint 本身公开了一种几乎可以用任何测试框架创建规则测试工具的方法。
var testRule = stylelint.createRuleTester(equalityCheck)
传入 equalityCheck 函数。给定一些信息,此检查工具应使用您喜欢的任何测试运行器来执行相等性检查。
equalityCheck 函数应该接受两个参数:
processCss {Promise}:一个 Promise,释为您需要检查的对照组的数组(文档附后)。context {object}:包含您可能需要的其他信息的对象:
caseDescription {string}:整个测试用例的描述。最终打印会像这样:> rule: value-list-comma-space-before
> config: "always-single-line"
> code: "a { background-size: 0 ,0;\n}"
comparisonCount {number}:需要执行的比较次数(例如对 tape 有用)。completeAssertionDescription {string}:虽然每个单独的对照组可能有自己的描述,但这个是对整个断言的描述(例如对 Mocha 有用)。only {boolean}:如果为 true,那么测试运行器应该只运行这个测试用例(例如 tape 中的 test.only,Mocha中的 describe.only)。processCss 是一个 Promise,它释为对照组的数组。每个对照组都具有以下属性:
actual {any}:某些实际值。expected {any}:某些预期值。description {string}:一个(可能是空的)比较的描述。在 equalityCheck 函数中,您需要确保执行以下操作:
processCss 解析后,遍历每个对照组。actual === expected 检查。返回 testRule 函数(如上所述)。