描述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
- 由于缺少仪器而运行失败
2条答案
按热度按时间ddarikpa1#
这是预期的行为,但我可以理解为什么它会让人觉得像是一个bug。关于以下文档的解释,你怎么看?
--test
标志旨在尽可能快地完成构建,因此它会移除已知会拖慢构建速度且不需要用于功能测试的插件。其中一个这样的插件是@storybook/addon-coverage
,它与 Storybook Test runner 一起使用,以收集您的故事的覆盖率信息。如果您正在使用
addon-coverage
并且针对已构建的 Storybook 运行测试运行器,--test
标志将剥离覆盖率信息。要配置--test
构建以保留覆盖率信息(以稍慢一些的构建速度为代价),请更新.storbyook/main.js
:wj8zmpe12#
感谢 @shilman 的回答,非常感谢。
我认为在文档中添加一条小提示,对于使用覆盖率和测试运行器的人员来说,这是一个很好的开始!
稍微考虑了一下,我对此唯一的警告是,通过这种方式强制消费者覆盖禁用列表,实际上是通过硬编码所有SB提供的默认值(减去覆盖率插件),这样做的缺点是消费者将无法从SB未来可能决定不需要的任何其他附加插件中受益。
我知道这并不完全符合您现有的通用测试构建配置模式,但我在想是否值得考虑为
disableCoverage
添加一个特定的标志,该标志的行为是从禁用插件列表中去除addon-coverage
。这样感兴趣的消费者可以确保他们的覆盖率仍然存在,但仍然可以从未来发布的默认忽略列表中受益于任何其他附加插件。或者或者作为补充,您可以利用
COVERAGE=true
/STORYBOOK_COVERAGE=true
环境变量自动完成此项判断,这将与某些工具(如vite-istanbul
)如何指示对代码进行插桩的方式相辅相成。只是供大家思考,我很好奇你们的看法:)