加入在线直播:周四,美国东部时间上午 11 点,Storybook 9 发布会及 AMA 问答

Story 覆盖率

为您的 stories 生成代码覆盖率报告

在 Github 上查看

Storybook 覆盖率插件

支持 Storybook 和 Storybook test runner 中的代码覆盖率工具。它支持使用 Webpack5Vite 的 Storybook 项目。

安装

通过添加 @storybook/addon-coverage 依赖项来安装此插件

yarn add -D @storybook/addon-coverage

并在您的 .storybook/main.js 中注册它

export default {
  addons: ["@storybook/addon-coverage"],
};

配置插件

如果您的项目使用 Webpack5,此插件会使用 istanbul-lib-instrument 的自定义包装器来检测您的代码;如果您的项目使用 Vite,则使用 vite-plugin-istanbul。它提供了一些默认配置,但如果您想添加自己的配置,可以通过在 .storybook/main.js 中设置选项来完成。

export default {
  addons: [
    {
      name: "@storybook/addon-coverage",
      options: {
        istanbul: {
          include: ["**/stories/**"],
        },
      },
    },
  ],
};

如果您的项目使用 Webpack5,可用选项如下

选项名称 描述 类型 默认值
cwd 设置工作目录 字符串 process.cwd()
nycrcPath 要使用的特定 nyc 配置的路径,而不是自动搜索 nyc 配置。 字符串 -
include 用于包含文件的 Glob 模式。它优先于您的 nyc 配置中的 include 定义 字符串数组 -
exclude 用于排除文件的 Glob 模式。它优先于您的 nyc 配置中的 exclude 定义 字符串数组 https://github.com/storybookjs/addon-coverage/blob/main/src/constants.ts 中的 defaultExclude
extension 支持的扩展名列表。它优先于您的 nyc 配置中的 extension 定义 字符串数组 ['.js', '.cjs', '.mjs', '.ts', '.tsx', '.jsx', '.vue', '.svelte]
coverageVariable Istanbul 将用于存储覆盖率结果的全局变量名称。 字符串 -
preserveComments 指示在代码检测过程中是否应保留代码中的注释。 布尔值 true
compact 控制检测后的代码输出是否紧凑。设置为 false 时对于调试很有用。 布尔值 false
esModules 确定要检测的代码是否使用 ES Module 语法。 布尔值 true
autoWrap 设置为 true 时,将程序代码包装在一个函数中,以启用顶层 return 语句。 布尔值 true
produceSourceMap 如果为 true,指示 Istanbul 为检测后的代码生成 source map。 布尔值 true
sourceMapUrlCallback 生成 source map 时,会使用文件名和 source map URL 调用的回调函数。 函数 -
debug 启用调试模式,在代码检测过程中提供额外的日志信息。 布尔值 -

注意:如果您使用 TypeScript,可以像这样导入选项的类型

import type { AddonOptionsWebpack } from "@storybook/addon-coverage";

如果您的项目使用 Vite,可用选项如下

选项名称 描述 类型 默认值
cwd 设置工作目录 字符串 process.cwd()
include 更多信息请参见此处 Array<String>string ['**']
exclude 更多信息请参见此处 Array<String>string list
extension 除了 .js 之外,nyc 应尝试处理的扩展名列表 Array<String>string ['.js', '.cjs', '.mjs', '.ts', '.tsx', '.jsx', '.vue', '.svelte]
requireEnv 可选的布尔值,要求环境变量(默认为 VITE_COVERAGE)等于 true 才能检测代码。否则,即使未设置环境变量,也会进行检测。但是,如果未设置 requireEnv,则当环境变量等于 false 时,检测将停止。 布尔值 -
cypress 可选的布尔值,将环境变量更改为 CYPRESS_COVERAGE 而不是 VITE_COVERAGE。为了方便与 @cypress/code-coverage 覆盖率一起使用 布尔值 -
checkProd 可选的布尔值,强制插件跳过生产环境的代码检测。查看 ResolvedConfig 中 Vite 的 isProduction 键。 布尔值 -
forceBuildInstrument 可选的布尔值,强制插件在构建模式下添加代码检测。 布尔值 false
nycrcPath 要使用的特定 nyc 配置的路径,而不是自动搜索 nyc 配置。此参数仅传递给 @istanbuljs/load-nyc-config。 字符串 -

注意:如果您使用 TypeScript,可以像这样导入选项的类型

import type { AddonOptionsVite } from "@storybook/addon-coverage";

故障排除

覆盖率插件不支持优化构建

--test 标志旨在尽可能快,会移除已知会减慢构建速度且功能测试不需要的插件。其中一个插件是 @storybook/addon-coverage,它与 Storybook Test runner 一起用于收集您的 stories 的覆盖率信息。

如果您正在使用 addon-coverage 针对您的 构建的 Storybook 运行 test runner,则 --test 标志将剥离覆盖率信息。要配置 --test 构建以保留覆盖率信息(会略微减慢构建速度),请更新您的 Storybook 配置文件(即,.storybook/main.js|ts)并包含 disabledAddons 选项。

// main.js

export default {
  // Your Storybook configuration goes here
  build: {
    test: {
      disabledAddons: [
        '@storybook/addon-docs',
        '@storybook/addon-essentials/docs',
      ],
    },
  },
}

开发脚本

  • yarn start 在观察模式下运行 babel
  • yarn build 构建和打包您的插件代码

要运行示例,请选择 examples 目录中的一个项目,然后运行

  • yarn 安装依赖并本地链接插件
  • yarn storybook 运行 Storybook
  • yarn test-storybook --coverage 测试覆盖率报告生成

许可证

MIT

作者
  • ndelangen
    ndelangen
  • shilman
    shilman
  • tmeasday
    tmeasday
  • ghengeveld
    ghengeveld
  • winkervsbecks
    winkervsbecks
  • yannbf
    yannbf
支持
    HTML
    Preact
    React
    Svelte
    Vue
    Web Components
标签