Storybook version8 智能化构建组件文档与单元测试
根据官方文档说法,storybook 是一个独立构建前端UI组件与页面的车间。
Storybook is a frontend workshop for building UI components and pages in isolation. It helps you develop and share hard-to-reach states and edge cases without needing to run your whole app. Thousands of teams use it for UI development, testing, and documentation. It's open source and free.
使用storybook可以很方便的给组件或者页面生成交互效果和用例,它提供了丰富的功能来让我们使用。
快速上手
首先启动一个项目,这里以React为例:npx create-react-app my-app。
然后将storybook集成到工程中,参考官方文档,安装有点慢,然后等安装好之后,启动命令:npm run storybook,
就会在浏览器加载出一个页面,类似这种
会有一些引导步骤教你这个东西怎么用,这里有一些常用的方法,参考如下:
- 如何增加新的测试组件
- 如何增加不同属性的测试
- 如何进行组件的单元测试
- 如何加载远程数据
解答:
- 首先在stories/下创建一个*.stories.js|ts的文件,
在文件中需要默认导出 storybook所需的meta data,
如:
import Card from '@/components/Card';
export default {
title:'components/Card',
component:Card
}
这是最基本的配置,title则对应了页面上左侧的菜单,会根据/自动分级,
2. 如果只像第一步那样配置是加载不出来的,因为没有参数配置
增加参数配置其实就是导出一个对象,如:
export const default_config={}
export const useLabel = {
args:{label:"天下无贼"}
}
上面导出了两个配置对象,第二个配置对象有一个args字段,该字段即为你的组件的props值,useLabel则会作为页面上的菜单名称显示出来,如图:

然后右侧的console会出现该参数对应的控制台

在上方会渲染出携带该prop的参数,这样一个基本的组件文档就搞好了,
- storybook提供了对组件进行单元测试的方法,即:play属性
export const useColor = {
args: {
textColor: "red",
},
play: async function ({ canvasElement }) {
const canvas = within(canvasElement);
const labelDiv = canvas.getByText("default:card", {
selector: "div",
});
await expect(labelDiv).toHaveStyle({ color: "rgb(255, 0, 0)" });
},
};
上面的函数意思是:选取到textContent为"default:card"的div,这里指的是组件本身,然后用expect断言测试是否有对应的style,如果有则为测试通过,反之则为失败,如图:

补充!:在meta data中可以添加decorator来嵌套组件,代码如图:
export default {
title: "components/Card",
component: Card,
args: {
onClick: fn(),
},
argTypes: {
textColor: { control: "color" },
},
decorators: [
(Story) => (
<div style={{ border: "1px solid red" }}>
<Story />
</div>
),
],
};
这样在上方渲染组件的时候,组件就会被包裹在一个红色边框的盒子里
- 通过storybook提供的loader来加载远程数据,如代码:
import type { Meta, StoryObj } from '@storybook/react';
import fetch from 'node-fetch';
import { TodoItem } from './TodoItem';
/*
* Render functions are a framework specific feature to allow you control on how the component renders.
* See https://storybook.js.org/docs/api/csf
* to learn how to use render functions.
*/
const meta: Meta<typeof TodoItem> = {
component: TodoItem,
render: (args, { loaded: { todo } }) => <TodoItem {...args} {...todo} />,
};
export default meta;
type Story = StoryObj<typeof TodoItem>;
export const Primary: Story = {
loaders: [
async () => ({
todo: await (await fetch('https://jsonplaceholder.typicode.com/todos/1')).json(),
}),
],
};
官方文档:这里
Storybook version8 智能化构建组件文档与单元测试的更多相关文章
- 解析Markdown文件生成React组件文档
前言 最近做的项目使用了微前端框架single-spa. 对于这类微前端框架而言,通常有个utility应用,也就是公共应用,里面是各个子应用之间可以共用的一些公共组件或者方法. 对于一个团队而言,项 ...
- springboot+mybatis-puls利用swagger构建api文档
项目开发常采用前后端分离的方式.前后端通过API进行交互,在Swagger UI中,前后端人员能够直观预览并且测试API,方便前后端人员同步开发. 在SpringBoot中集成swagger,步骤如下 ...
- Docz 用 MDX 写 React UI 组件文档
Docz 用 MDX 写 React UI 组件文档 前言 为了提升开发效率,创建一套 UI 组件库是一种较为有效的方式之一:可以减少重复工作.提高可复用,所以现在越来越多团队开始创建自己的 UI 组 ...
- Spring Boot中使用Swagger2构建API文档
程序员都很希望别人能写技术文档,自己却很不愿意写文档.因为接口数量繁多,并且充满业务细节,写文档需要花大量的时间去处理格式排版,代码修改后还需要同步修改文档,经常因为项目时间紧等原因导致文档滞后于代码 ...
- 基于 Python 官方 GitHub 构建 Python 文档
最近在学 Python,所以总是在看 Python 的官方文档, https://docs.python.org/2/ 因为祖传基因的影响,我总是喜欢把这些文档保存到本地,不过 Python 的文档实 ...
- springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务
springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...
- 如何在ASP.NET Core 中快速构建PDF文档
比如我们需要ASP.NET Core 中需要通过PDF来进行某些简单的报表开发,随着这并不难,但还是会手忙脚乱的去搜索一些资料,那么恭喜您,这篇帖子会帮助到您,我们就不会再去浪费一些宝贵的时间. 在本 ...
- springboot利用swagger构建api文档
前言 Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件.本文简单介绍了在项目中集成swagger的方法和一些常见问题.如果想深入分析项目源码,了解更多内容,见参考资料. S ...
- 解放生产力,自动化生成vue组件文档
一.现状 Vue框架在前端开发中应用广泛,当一个多人开发的Vue项目经过长期维护之后往往会沉淀出很多的公共组件,这个时候经常会出现一个人 开发了一个组件而其他维护者或新接手的人却不知道这个组件是做什么 ...
- 打造自己的Vue组件文档生成工具
程序员最讨厌的两件事情,第一种是写文档,另一种是别人没有写文档.有没有直接根据vue组件生成文档的呢?当然是有的的.但第三方使用起来不一定能和现有项目结合使用,往往需要额外的注释用来标记提取信息.使用 ...
随机推荐
- Redis巡检检查 redis-check-aof
一.AOF1.AOF 是什么以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,Redis启动之初会读取该文件重新构建数据,换言之,R ...
- 解决方案 | Python中安装pix2tex latex ocr出现报错Cannot mix incompatible Qt library (6.6.2) with this library (6.7.2)
一.问题 Python中安装pix2tex latex ocr出现报错Cannot mix incompatible Qt library (6.6.2) with this library (6.7 ...
- iOS开发基础109-网络安全
在iOS开发中,保障应用的网络安全是一个非常重要的环节.以下是一些常见的网络安全措施及对应的示例代码: Swift版 1. 使用HTTPS 确保所有的网络请求使用HTTPS协议,以加密数据传输,防止中 ...
- vuex使用和场景案例
vuex是vue提供的一个集中式状态管理器,用于对数据的集中式管理. vuex有四个重要的属性:state.mutations.actions.getters 1.vuex的使用 安装 npm ins ...
- 【MySQL】 将字段相同的记录排在一起,按时间倒序
一.实现效果: 蓝牙mac字段是相同的记录,排在一起,再按时间倒序,总体时间来说也需要倒序 二.SQL编写: 最开始的想法就是,那我直接按mac和时间排序不就好了 SELECT * FROM aca_ ...
- 【OracleDB】 04 DDL
Create 创建表 创建数据表,语法和MySQL基本一样 演示案例练习: 打开PLSQL,新建一个SQL脚本窗口 编写SQL语句 -- 创建学生信息表 CREATE TABLE tb_student ...
- AI大模型的技术之母 —— Attention Is All You Need —— Tansformer
论文地址: https://arxiv.org/abs/1706.03762
- MindSpore 如何实现一个线性回归 —— Demo示例
如何使用 MindSpore 实现一个简单的 线性回归呢??? 根据前面的mindspore的基本操作的学习写出了下面的 一个简单的线性回归算法. import mindspore import ...
- 聊一聊 Netty 数据搬运工 ByteBuf 体系的设计与实现
本文基于 Netty 4.1.56.Final 版本进行讨论 时光芿苒,岁月如梭,好久没有给大家更新 Netty 相关的文章了,在断更 Netty 的这段日子里,笔者一直在持续更新 Linux 内存管 ...
- C#数据结构与算法实战入门指南
前言 在编程领域,数据结构与算法是构建高效.可靠和可扩展软件系统的基石.它们对于提升程序性能.优化资源利用以及解决复杂问题具有至关重要的作用.今天大姚分享一些非常不错的C#数据结构与算法实战教程,希望 ...