vitest-stylelint-utils v1.0.1
Vitest Stylelint Utils
Utilities for testing Stylelint plugins.
Currently this package is just a port of jest-preset-stylelint to Vitest.
Unlike jest-preset-stylelint it doesn't add a toHaveMessage custom matcher to expect. If you'd like to have that matcher, copy this code from jest-preset-stylelint and follow these Vitest docs to extend the Vi namespace if you're using TypeScript.
Currently describe, expect and it must be passed to getTestRule as simply using Vitest as a peer dependency doesn't work.
Installation
Install this alongside Stylelint and Vitest
pnpm install --save-dev vitest-stylelint-utils stylelint vitest
# or using yarn
yarn add --dev vitest-stylelint-utils stylelint vitest
# or using npm
npm install --save-dev vitest-stylelint-utils stylelint vitestSetup
There is no required setup.
Optionally you can make it global to avoid rewriting setup boilerplate in multiple test files. There are 2 steps to do this:
Create
vitest.setup.tsin the root of your project. Provide the required options togetTestRule:import { describe, expect, it } from 'vitest'; import { getTestRule, type TestRule } from 'vitest-stylelint-utils'; global.testRule = getTestRule({ plugins: ['./'], describe, expect, it }); declare global { var testRule: TestRule; }Add
vitest.setup.tsto yourvitest.config.ts:import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { setupFiles: ['./vitest.setup.ts'], }, });
Usage
getTestRule
import { messages, ruleName } from '.';
testRule({
ruleName,
config: [true, { type: 'kebab' }],
fix: true,
accept: [
{
code: '.class {}',
description: 'simple class selector',
},
{
code: '.my-class {}',
description: 'simple 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,
},
],
},
],
});