```js filename=".storybook/test-runner.js" renderer="common" language="js" const { getStoryContext } = require('@storybook/test-runner'); const { injectAxe, checkA11y } = require('axe-playwright'); /* * See https://storybook.js.org/docs/writing-tests/test-runner#test-hook-api * to learn more about the test-runner hooks API. */ module.exports = { async preVisit(page) { await injectAxe(page); }, async postVisit(page, context) { // Get the entire context of a story, including parameters, args, argTypes, etc. const storyContext = await getStoryContext(page, context); // Do not run a11y tests on disabled stories. if (storyContext.parameters?.a11y?.disable) { return; } await checkA11y(page, '#storybook-root', { detailedReport: true, detailedReportOptions: { html: true, }, }); }, }; ``` ```ts filename=".storybook/test-runner.ts" renderer="common" language="ts" import type { TestRunnerConfig } from '@storybook/test-runner'; import { getStoryContext } from '@storybook/test-runner'; import { injectAxe, checkA11y } from 'axe-playwright'; /* * See https://storybook.js.org/docs/writing-tests/test-runner#test-hook-api * to learn more about the test-runner hooks API. */ const config: TestRunnerConfig = { async preVisit(page) { await injectAxe(page); }, async postVisit(page, context) { // Get the entire context of a story, including parameters, args, argTypes, etc. const storyContext = await getStoryContext(page, context); // Do not run a11y tests on disabled stories. if (storyContext.parameters?.a11y?.disable) { return; } await checkA11y(page, '#storybook-root', { detailedReport: true, detailedReportOptions: { html: true, }, }); }, }; export default config; ```