@accesslint/vitest

中文文档
0.3.2发布于 2026/07/27MITTypeScriptESM + CJS构建来源已验证近 30 天下载 4.8万

Vitest 的可访问性断言—— 由 AccessLint 驱动的 BeAccessable( ) 匹配器

中文使用文档
文档目录17 节
  1. 安装
  2. 设置
  3. 人工登记
  4. 使用量
  5. 框架配方
  6. 反应.. @testing-library/react
  7. 维- @testing-library/vue
  8. 斯维尔特.. @testing-library/svelte
  9. 角 -- -- @testing-library/angular
  10. 选项
  11. 失败消息
  12. 即时基线
  13. 趋势报告
  14. 审计备忘录(选择中固定)
  15. 类型脚本
  16. 它检查什么
  17. 许可证

@ accesslint/ vitest (英语)

Vitest的无障碍断言. 添加一个 toBeAccessible() 火柴电源 访问提示 检查WCAG 2.2 A级和AA级的违法行为.

安装

npm install --save-dev @accesslint/vitest

vitest ^ 2.0 需要作为对等依赖.

设置

添加 @accesslint/vitest 作为您 Vitest 配置中的设置文件 :

// vitest.config.ts
import { defineConfig } from "vitest/config";

export default defineConfig({
  test: {
    setupFiles: ["@accesslint/vitest"],
  },
});

此自动注册 toBeAccessible() 选手.

人工登记

import { accesslintMatchers } from "@accesslint/vitest/matchers";
import { expect } from "vitest";

expect.extend(accesslintMatchers);

使用量

通过任何 DOM Element 改为 expect() 打电话 toBeAccessible()数字 :

const container = document.createElement("div");
container.innerHTML = '<img src="photo.jpg" alt="A photo">';

expect(container).toBeAccessible();

违章行为范围为您所通过元素的后人,因此您可以单独测试组件. 当元素不是文档根时,页级规则(html-has-lang, (中文(简体) ), document-title,地标等)自动跳出——以 componentMode: false 如果你想要他们回来.

框架配方

与任何DOM一起工作,生产在一个jsdom或幸福度环境中.

反应.. @testing-library/react

import { render } from "@testing-library/react";
import { LoginForm } from "./LoginForm";

test("LoginForm is accessible", () => {
  const { container } = render(<LoginForm />);
  expect(container).toBeAccessible();
});

维- @testing-library/vue

import { render } from "@testing-library/vue";
import LoginForm from "./LoginForm.vue";

test("LoginForm is accessible", () => {
  const { container } = render(LoginForm);
  expect(container).toBeAccessible();
});

斯维尔特.. @testing-library/svelte

import { render } from "@testing-library/svelte";
import LoginForm from "./LoginForm.svelte";

test("LoginForm is accessible", () => {
  const { container } = render(LoginForm);
  expect(container).toBeAccessible();
});

角 -- -- @testing-library/angular

import { render } from "@testing-library/angular";
import { LoginFormComponent } from "./login-form.component";

test("LoginForm is accessible", async () => {
  const { container } = await render(LoginFormComponent);
  expect(container).toBeAccessible();
});

选手接受一切 Element —— 说 container, (中文(简体) ), screen.getByRole('form'),一个平地 document.createElement(...),或 document.body 进行整页审计.

选项

expect(container).toBeAccessible({
  /** Rule IDs to disable for this assertion. */
  disabledRules: ["distinguishable/color-contrast"],

  /** Additional rules to run on top of the built-in set. */
  additionalRules: [myCompiledDeclarativeRule],

  /** Include AAA-level rules (excluded by default). */
  includeAAA: true,

  /** Skip page-level rules — defaults to true for non-root elements. */
  componentMode: true,

  /** Translated rule messages and guidance (e.g. "en", "es"). */
  locale: "es",

  /** Minimum impact that causes failure. "minor" (default) fails on anything. */
  failOn: "serious",

  /** Compare against a baseline instead of asserting zero violations. */
  snapshot: "login-form",

  /** Where to store snapshot files. Defaults to {cwd}/accessibility-snapshots/. */
  snapshotDir: "./test/a11y-snapshots",
});

失败消息

失败包括影响、世界保护理事会的标准、水平、选择者、可选上下文、建议固定办法和补救指导:

Expected element to have no accessibility violations, but found 2:

  [critical] text-alternatives/img-alt (WCAG 1.1.1, A) — Images must have alternate text
    selector: img
    fix: add-attribute alt=""
    guidance: Decorative images should have alt=""; informative images should describe content.

  [serious] distinguishable/color-contrast (WCAG 1.4.3, AA) — Text must have sufficient color contrast
    selector: p.subtitle

即时基线

在组件当前可访问状态下锁定, 并且仅失败于 新设 违反情况。 在遗留的代码库中采用 AccessLint 有用 .

expect(container).toBeAccessible({ snapshot: "login-form" });
  • 首发 创建 accessibility-snapshots/login-form.json 和通过.
  • 随后运行 如果有任何新的违规行为出现于基线之外,则无法执行.
  • 向下旋转 ——当仅发现有固定违规情况(无新增)时,基准自动更新.
  • 强制刷新 基线 ACCESSLINT_UPDATE=1 或维特的 -u 编号 : --update 旗帜.

违规身份开始于 ruleId + selector 然后通过一个多信号匹配器倒下 @accesslint/heal-diff数字 :

  1. 精确选择器匹配( 快速路径) .
  2. 锁定属性( A)data-testid, (中文(简体) ), id, (中文(简体) ), name, (中文(简体) ), href, (中文(简体) ), for, (中文(简体) ), aria-label) (中文(简体) ).
  3. 计算出ARIA角色+可访问名.
  4. HTML指纹(正态外HTML hash).
  5. 相对位置(靠近地标线索),独有性格.

当一个非精确的级别将基准选择器的自动愈合到当前时,快照会被重写,而 a "healed" 已登录为 .history.ndjson测试还是通过了 当没有级别匹配但信号较弱重叠时,故障信息附加一个 likely moved from: 提示,这样你就可以从"真正的新一期"看一看"同样的问题,不同的选择者".

趋势报告

每个创建 / Ratch- down / 强制更新事件 附加记录到 accessibility-snapshots/.history.ndjson 与基线 JSON 文件并列 。 从历史中产生一个趋势报告 @accesslint/report数字 :

npx @accesslint/report --format md > a11y-report.md
npx @accesslint/report --format html --out a11y-report.html

报告显示一个叠加的图表,显示每个快照的违反总数,加上加入WCAG元数据的每个规则移动表 @accesslint/core。侧车文件是仅附件且安全可执行的;合并其上的冲突通过调和双方解决.

审计备忘录(选择中固定)

默认时间 : toBeAccessible() 呼叫运行一个新的审计。 对于将多个断言与同一DOM状态连在一起的组件测试,输入固定值以重复一次断言:

import { test } from "@accesslint/vitest/fixture";
import { expect } from "vitest";

test("Form", ({ a11y }) => {
  render(<Form />);
  a11y.refresh(); // snapshot current DOM state

  // both assertions reuse one runAudit() call
  expect(screen.getByRole("form")).toBeAccessible();
  expect(screen.getByRole("button")).toBeAccessible();
});

打电话 a11y.refresh() 在DOM突变后,应当重新审计.

类型脚本

包括类型。 导入软件包会增加 Vitest 的 expect 与 toBeAccessible() 自动.

它检查什么

WCAG 2.2 A级和AA级规则通过 @accesslint/core,覆盖图像,形式,ARIA属性,颜色对比,地标,链接,表格,文档语言等等. 见 核心规则表 完整名单.

许可证

麻省理工学院

版本与发布记录

@accesslint/vitest 共发布 11 个版本,首次发布于 2026/02/17;过去 12 个月发布了 11 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.3.2latest2026/07/273 个月前
0.3.12026/04/186 个月前
0.3.02026/04/186 个月前
0.1.92026/02/268 个月前
0.1.82026/02/258 个月前
0.1.72026/02/238 个月前

关于 @accesslint/vitest 的常见问题

@accesslint/vitest 是什么?

Vitest 的可访问性断言—— 由 AccessLint 驱动的 BeAccessable( ) 匹配器

如何安装 @accesslint/vitest?

在项目目录运行 npm install @accesslint/vitest,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:vitest(>=2.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@accesslint/vitest 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@accesslint/vitest 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@accesslint/vitest 可以商用吗?

@accesslint/vitest 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@accesslint/vitest 的下载量有多少?

根据 npm 官方下载统计,@accesslint/vitest 在 2026/10/05 – 2026/11/03 这 30 天内被下载 48,234 次,日均约 1,608 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@accesslint/vitest 还在维护吗?

最新版本 0.3.2 发布于 2026/07/27(3 个月前);至今共发布 11 个版本,其中过去 12 个月发布了 11 个;首次发布于 2026/02/17。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。