storybook [Bug]:默认的 --test 构建配置省略了 addon-coverage,这会破坏 test-runner 运行,

rqqzpn5f  于 2个月前  发布在  其他
关注(0)|答案(2)|浏览(29)

描述bug

你好,我将这个问题作为一个bug发布,但这可能是有意为之的行为,所以请告诉我是否是这样。如果不是,我很乐意为此提交一个PR来修复这个问题。
最近新增了 --test 构建模式用于 storybook,据我了解,它旨在用于与 Chromatic 和 @storybook/test-runner 更快地构建。然而,在尝试使用它时,我注意到,如果你使用 @storybook/addon-coverage 插件并尝试使用 --test 标志进行构建,而没有自定义配置,那么构建器似乎会移除覆盖率仪器,这反过来会导致在使用 --coverage 标志运行测试运行器时失败。
这种情况发生的原因是因为这是 --test 构建模式默认如何配置的方式:
storybook/code/lib/core-server/src/presets/common-override-preset.ts
第41行 00124ed
| | ['@storybook/addon-docs','@storybook/addon-essentials/docs','@storybook/addon-coverage'] |
要在现有项目中解决此问题,您只需在您的配置文件中取消默认设置即可:

// main.ts|js
export default {
  // ...
  build: {
    test: {
      disabledAddons: [
        '@storybook/addon-docs',
        '@storybook/addon-essentials/docs',
      ],
    },
  },
}

我更想知道这是否是有意为之的,因为从故事书的“测试”构建中禁用覆盖率对我来说感觉有点奇怪,考虑到这是您确实收集覆盖率的主要用例之一。
相关问题: storybookjs/addon-coverage#31

重现步骤

  • 配置您的 storybook 以使用 @addon-coverage 并使用 @storybook/test-runner 运行
  • 在 storybook/main.js|ts 中运行 npx storybook build --test,不附加任何额外的测试配置
  • 运行 npm run test-storybook -- --coverage
  • 由于缺少仪器而运行失败
ddarikpa

ddarikpa1#

这是预期的行为,但我可以理解为什么它会让人觉得像是一个bug。关于以下文档的解释,你怎么看?
--test 标志旨在尽可能快地完成构建,因此它会移除已知会拖慢构建速度且不需要用于功能测试的插件。其中一个这样的插件是 @storybook/addon-coverage ,它与 Storybook Test runner 一起使用,以收集您的故事的覆盖率信息。
如果您正在使用 addon-coverage并且针对已构建的 Storybook 运行测试运行器,--test 标志将剥离覆盖率信息。要配置 --test 构建以保留覆盖率信息(以稍慢一些的构建速度为代价),请更新 .storbyook/main.js :

// main.ts|js
export default {
  // ...
  build: {
    test: {
      disabledAddons: [
        '@storybook/addon-docs',
        '@storybook/addon-essentials/docs',
      ],
    },
  },
}
wj8zmpe1

wj8zmpe12#

感谢 @shilman 的回答,非常感谢。
我认为在文档中添加一条小提示,对于使用覆盖率和测试运行器的人员来说,这是一个很好的开始!
稍微考虑了一下,我对此唯一的警告是,通过这种方式强制消费者覆盖禁用列表,实际上是通过硬编码所有SB提供的默认值(减去覆盖率插件),这样做的缺点是消费者将无法从SB未来可能决定不需要的任何其他附加插件中受益。
我知道这并不完全符合您现有的通用测试构建配置模式,但我在想是否值得考虑为 disableCoverage 添加一个特定的标志,该标志的行为是从禁用插件列表中去除 addon-coverage 。这样感兴趣的消费者可以确保他们的覆盖率仍然存在,但仍然可以从未来发布的默认忽略列表中受益于任何其他附加插件。
或者或者作为补充,您可以利用 COVERAGE=true / STORYBOOK_COVERAGE=true 环境变量自动完成此项判断,这将与某些工具(如 vite-istanbul )如何指示对代码进行插桩的方式相辅相成。
只是供大家思考,我很好奇你们的看法:)

相关问题