Jest preset for Stylelint plugins.
npm install jest-preset-stylelint 
Jest preset for Stylelint plugins.
Install the preset alongside Jest and Stylelint:
``bash`
npm install jest-preset-stylelint jest stylelint --save-dev
Add the preset to your jest.config.js or jest field in package.json:
`json`
{
"preset": "jest-preset-stylelint"
}
If your plugin is ESM, you'll need to configure Jest appropriately.
Optionally, you can avoid specifying plugins in every schema by defining your own setup file to configure the testRule/testRuleConfigs functions.
This is useful if you have many tests. There are two additional steps to do this:
1. Create jest.setup.js in the root of your project. Provide plugins option to getTestRule/getTestRuleConfigs:
`js
import { getTestRule, getTestRuleConfigs } from "jest-preset-stylelint";
import myPlugin from "./my-plugin.js";
const plugins = [myPlugin];
global.testRule = getTestRule({ plugins });
global.testRuleConfigs = getTestRuleConfigs({ plugins });
`
2. Add jest.setup.js to your jest.config.js or jest field in package.json:
`json`
{
"preset": "jest-preset-stylelint",
"setupFiles": ["
}
If you get a segmentation fault while running the preset on Node.js 18, you can use jest-light-runner:
`json`
{
"preset": "jest-preset-stylelint",
"runner": "jest-light-runner"
}
This preset exposes the following global functions as a helper.
See also the type definitions for more details.
The testRule function enables you to efficiently test your plugin using a schema.
For example, we can test a plugin that enforces and autofixes kebab-case class selectors:
`js
// my-plugin.test.js
import myPlugin from "./my-plugin.js";
const plugins = [myPlugin];
const {
ruleName,
rule: { messages }
} = myPlugin;
testRule({
plugins,
ruleName,
config: [true, { type: "kebab" }],
fix: true,
accept: [
{
code: ".class {}",
description: "simple class selector"
},
{
code: ".my-class {}",
description: "kebab class selector"
}
],
reject: [
{
code: ".myClass {}",
fixed: ".my-class {}",
description: "camel case class selector",
message: messages.expected(),
line: 1,
column: 1,
endLine: 1,
endColumn: 8
},
{
code: ".MyClass,\n.MyOtherClass {}",
fixed: ".my-class,\n.my-other-class {}",
description: "two pascal class selectors in a selector list",
warnings: [
{
message: messages.expected(),
line: 1,
column: 1,
endLine: 1,
endColumn: 8
},
{
message: messages.expected(),
line: 2,
column: 1,
endLine: 2,
endColumn: 13
}
]
}
]
});
`
The testRuleConfigs function enables you to test invalid configs for a rule.
For example:
`js
testRuleConfigs({
plugins,
ruleName,
accept: [
{
config: "valid"
}
],
reject: [
{
config: "invalid"
},
{
config: [/invalid/],
description: "regex is not allowed"
}
]
});
``