根据官方文档说法,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,

就会在浏览器加载出一个页面,类似这种

会有一些引导步骤教你这个东西怎么用,这里有一些常用的方法,参考如下:


  1. 如何增加新的测试组件
  2. 如何增加不同属性的测试
  3. 如何进行组件的单元测试
  4. 如何加载远程数据

解答:

  1. 首先在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的参数,这样一个基本的组件文档就搞好了,

  1. 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>
),
],
};

这样在上方渲染组件的时候,组件就会被包裹在一个红色边框的盒子里

  1. 通过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 智能化构建组件文档与单元测试的更多相关文章

  1. 解析Markdown文件生成React组件文档

    前言 最近做的项目使用了微前端框架single-spa. 对于这类微前端框架而言,通常有个utility应用,也就是公共应用,里面是各个子应用之间可以共用的一些公共组件或者方法. 对于一个团队而言,项 ...

  2. springboot+mybatis-puls利用swagger构建api文档

    项目开发常采用前后端分离的方式.前后端通过API进行交互,在Swagger UI中,前后端人员能够直观预览并且测试API,方便前后端人员同步开发. 在SpringBoot中集成swagger,步骤如下 ...

  3. Docz 用 MDX 写 React UI 组件文档

    Docz 用 MDX 写 React UI 组件文档 前言 为了提升开发效率,创建一套 UI 组件库是一种较为有效的方式之一:可以减少重复工作.提高可复用,所以现在越来越多团队开始创建自己的 UI 组 ...

  4. Spring Boot中使用Swagger2构建API文档

    程序员都很希望别人能写技术文档,自己却很不愿意写文档.因为接口数量繁多,并且充满业务细节,写文档需要花大量的时间去处理格式排版,代码修改后还需要同步修改文档,经常因为项目时间紧等原因导致文档滞后于代码 ...

  5. 基于 Python 官方 GitHub 构建 Python 文档

    最近在学 Python,所以总是在看 Python 的官方文档, https://docs.python.org/2/ 因为祖传基因的影响,我总是喜欢把这些文档保存到本地,不过 Python 的文档实 ...

  6. springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务

    springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...

  7. 如何在ASP.NET Core 中快速构建PDF文档

    比如我们需要ASP.NET Core 中需要通过PDF来进行某些简单的报表开发,随着这并不难,但还是会手忙脚乱的去搜索一些资料,那么恭喜您,这篇帖子会帮助到您,我们就不会再去浪费一些宝贵的时间. 在本 ...

  8. springboot利用swagger构建api文档

    前言 Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件.本文简单介绍了在项目中集成swagger的方法和一些常见问题.如果想深入分析项目源码,了解更多内容,见参考资料. S ...

  9. 解放生产力,自动化生成vue组件文档

    一.现状 Vue框架在前端开发中应用广泛,当一个多人开发的Vue项目经过长期维护之后往往会沉淀出很多的公共组件,这个时候经常会出现一个人 开发了一个组件而其他维护者或新接手的人却不知道这个组件是做什么 ...

  10. 打造自己的Vue组件文档生成工具

    程序员最讨厌的两件事情,第一种是写文档,另一种是别人没有写文档.有没有直接根据vue组件生成文档的呢?当然是有的的.但第三方使用起来不一定能和现有项目结合使用,往往需要额外的注释用来标记提取信息.使用 ...

随机推荐

  1. JavaScript --函数--手稿

  2. 使用Sequelize

    访问MySQL 当我们安装好MySQL后,Node.js程序如何访问MySQL数据库呢? 访问MySQL数据库只有一种方法,就是通过网络发送SQL命令,然后,MySQL服务器执行后返回结果. 我们可以 ...

  3. Swagger注解说明

    常用注解: - @Api()用于类: 表示标识这个类是swagger的资源 - @ApiOperation()用于方法: 表示一个http请求的操作 - @ApiParam()用于方法,参数,字段说明 ...

  4. 利用SpringBoot+rabbitmq 实现邮件异步发送,保证100%投递成功

    在之前的文章中,我们详细介绍了 SpringBoot 整合 mail 实现各类邮件的自动推送服务. 但是这类服务通常不稳定,当出现网络异常的时候,会导致邮件推送失败. 本篇文章将介绍另一种高可靠的服务 ...

  5. php环境,性能优化

    根据宝塔的推荐进行参数修改 我的是8G内存,修改成4G内存 下面是备份:修改前的 ; Start a new pool named 'www'.; the variable $pool can be ...

  6. 使用ollama本地部署gemma记录

    1.官网https://ollama.com/安装ollama 2.先配置一下环境变量 不然下载的东西会默认丢在C盘里 3.cmd执行ollama run gemma:2b (使用后推荐直接下7b,2 ...

  7. Vue仿微信PC客户端

    一个模仿PC微信客户端的纯前端vue项目 项目地址 github: https://github.com/TomHusky/vue-wechat-demo gitee: https://gitee.c ...

  8. Mysql函数12-DATE_FORMAT

    DATE_FORMAT函数用于日期格式的转换. 1.sql查询出一列create_time select create_time from goods where id=65 2.让create_ti ...

  9. 【Tomcat】IDEA工程没有EE规范的jar包?

    发现了一个问题,我安装了2种版本的Tomcat 一个是8版本,另一个是10版本 我在已经使用8版本的工程中,更换成使用10版本,当然一开始部署运行正常 但是关闭了工程之后,再次打开就发现,这些EE规范 ...

  10. 【转载】英特尔CEO:如果美出口管制太严,中国就必须生产自己的芯片

    原文地址: https://mbd.baidu.com/newspage/data/landingsuper?context={"nid"%3A"news_9816136 ...