当前位置: 首页 > news >正文

elementui from表单提交_跟我一起编写Vue3版ElementUI

vue3已经RC版了,但是目前国内最流行的UI库还没有动静。我们团队决定自己将ElementUI升级为3.0版本全面支持vue3.0

链接在此欢迎大家一起参与开源

fcaf8e7d4bb7b11ce92010467877aa39.png
github.com/kkbjs/eleme…

下面总结一下如何参加一个开源项目

一、提交PR的详细步骤

以下我把大体的步骤总结一下。

1. Fork代码

首先需要将vue代码通过github的fork功能复制一份到自己的github

github.com/kkbjs/eleme…

复制后的结果github.com/su37josephx…

2. clone到本地

git clone git@github.com:su37josephxia/element3.git
复制代码

3. 安装依赖

# 设置国内镜像
yarn config set registry https://registry.npm.taobao.org
# --ignore-scripts 用于忽略chrome浏览器的下载
yarn install --ignore-scripts
复制代码

4. 运行单元测试

# 强烈推荐大家全局安装
npm i jest -g
npm run test:unit
复制代码
a8afc2bfd59af3dae0307345e49cdbf5.png

5. 开发前同步官方最新代码

fork代码后,如果kkb主库有更新,需要手动拉去同步。这个过程应该是每天都需要做的事情

5.1 添加新远程分支

这个只需要做一次

git remote add upstream git@github.com:kkbjs/element3.git
复制代码
a8d4e035cfcf8027c6a0fd446e09e3c6.png

5.2 拉去合并远程分支到master分支

这个需要随时做 保持你的master分支永远是官方最新成果。

# 抓取源仓库修改 master分支
git fetch upstream master
# 切换分支
git checkout master
# 合并远程分支
git merge upstream/master
复制代码

6.功能点开发

6.1 选择功能点

目前Element还在开发的初期 目前的任务抚平vue2余vue3的语法差异,顺便重构一下代码结构,换用VTU进行单元测试。具体要求下一章会具体讲。所以这次就选择了一个比较简单的组件作为演示Card

6.2 从master分支创建修改分支

git checkout -b Card
复制代码

6.3 开发代码

开发后的结果大概是这个样子

主要是重新编写了测试用例
import Card from '../Card.vue'
import { mount } from '@vue/test-utils'
describe('Card.vue', () => {
describe('header', () => {
it('text', () => {
const wrapper = mount(Card, {
props: {
header: 'Header1'
}
})

expect(wrapper.find('.el-card__header').text()).toBe('Header1')
})

it('slot', () => {
const wrapper = mount(Card, {
slots: {
header: 'SoltHeader'
}
})

expect(wrapper.find('.el-card__header').text()).toBe('SoltHeader')
})
})

it('bodyStyle', () => {
const wrapper = mount(Card, {
props: {
bodyStyle: { padding: '10px' }
}
})
expect(wrapper.find('.el-card__body').attributes().style).toBe(
'padding: 10px;'
)
})

describe('shadow', () => {
it('alwarys', () => {
const wrapper = mount(Card, {
props: {
shadow: 'always'
}
})
expect(wrapper.classes()).toContain('is-always-shadow')
})

it('hover', () => {
const wrapper = mount(Card, {
props: {
shadow: 'hover'
}
})
expect(wrapper.classes()).toContain('is-hover-shadow')
})

it('never', () => {
const wrapper = mount(Card, {
props: {
shadow: 'never'
}
})
expect(wrapper.classes()).toContain('is-never-shadow')
})
})
})

复制代码

6.4 伺服运行单个测试用例

在开发的过程中推荐一直开着测试用TDD的方式进行开发

jest packages/card --watch
复制代码

7 提交commit

这里面涉及到一个问题就是必须要按照官方需要的格式提交commit msg。不然那会被hooks进行自动检查拒绝你commit。规约在此github.com/conventiona…

git commit -am 'fix: update Card and test'
复制代码

github.com/kkbjs/eleme…

8 提出PR

划分开发分支

git checkout -b 'Card'
复制代码

提交分支

git commit -am 'fix: update Card and test'
复制代码

推送本地分支到github

git push --set-upstream origin Card
复制代码

如何合并多余commit

另外如果涉及多次提交会有一个要处理合并多个commit的问题。

TODO 近期更新

提PR

9 坐等胜利的好消息

提交完成后就可以随时关注github.com/kkbjs/eleme…坐等好消息了

欢迎大家参加开源是世界 贡献你的力量。

二、如何选择入手

目前代码还处于比较初级的阶段。可以考虑和我一样先选择一个比较简单的组件进行。大概要干以下三个事情。

01 重构代码结构

旧的代码文件名和结构不是很统一。目前需要重构成新的文件名和文件结构

可以参考 /packages/button

02 更新单元测试代码

新的组件单元测试统一使用vue-test-utils-next框架 可以参考旧的用例编写。

vue-test-utils-next框架参考资料

  • API文档 github.com/vuejs/vue-t…

  • 源码 github.com/vuejs/vue-t…

03 更新API

测试过程中如果发现组件功能需要修改就需要改用vue3的api进行修改。

三、参考资料

vue-test-utils-next框架参考资料

  • API文档 github.com/vuejs/vue-t…

    • 源码 github.com/vuejs/vue-t…

JEST基础

可以看一下这篇文章入个门。juejin.im/post/684490…

覆盖率是什么

覆盖率 我们增加一个参数把覆盖率跑出来

npx jest --coverage
复制代码

实际上跑覆盖率的时候是有错的 我们先不去管他 我们先解析一下这个报告怎么看,如果大家学过软件工程会知道一般从理论上讲覆盖率包括

语句覆盖 节点覆盖 路径覆盖 条件组合覆盖 但是一般来讲不同框架理解不一样 在Jest这里大概是这样分解的

%stmts是语句覆盖率(statement coverage)是不是每个语句都执行了?
%Branch分支覆盖率(branch coverage):是不是每个if代码块都执行了?
%Funcs函数覆盖率(function coverage):是不是每个函数都调用了?
%Lines行覆盖率(line coverage):是不是每一行都执行了?

关注下面的标签,发现更多相似文


作者:全栈然叔
链接:https://juejin.im/post/6864462363039531022/
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章:

  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • 事物的开始和结束命令分别是什么_王者荣耀S22赛季什么时候开始?王者荣耀s21赛季结束时间...
  • map分组后取前10个_SQL分组查询后取每组的前N条记录
  • 烧结多孔砖孔洞率_烧结砖各种缺陷消除方法
  • 华为云计算面试需要掌握的知识_一文快速掌握华为云IPv6基础知识及使用指南...
  • awr报告分析 mysql_爱数AnyRobot:一文详解Oracle运维分析实践
  • 如何分析案件的性质_对涉黑犯罪案件,刑事律师如何阅卷?
  • scara工业机器人外观_scara工业机器人有哪些知名的品牌?
  • 二项分布最值推导_杨志明:高考数列中的最值与范围问题
  • css文字中间加竖线_前端初学者李不白,html+css的角度,带你分析蘑菇街官网!!!...
  • 笔记本电脑频繁自动重启_电脑一直自动重启,教您电脑一直自动重启怎么解决...
  • 动词ing形式的5种用法_动词ing形式的5种用法
  • python tcp处理_Python-对Pcap文件进行处理,获取指定TCP流
  • tomcat人数限制_Tomcat修改最大连接数
  • bcb image 动态大小_制作Excel动态图表,只需要3个步骤,上班人士必备技能
  • python3.6+scrapy+mysql 爬虫实战
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [译]CSS 居中(Center)方法大合集
  • conda常用的命令
  • ES6简单总结(搭配简单的讲解和小案例)
  • Java 最常见的 200+ 面试题:面试必备
  • jQuery(一)
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • MYSQL 的 IF 函数
  • Python语法速览与机器学习开发环境搭建
  • Redis的resp协议
  • V4L2视频输入框架概述
  • 基于游标的分页接口实现
  • 使用putty远程连接linux
  • 新书推荐|Windows黑客编程技术详解
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • (4)事件处理——(7)简单事件(Simple events)
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (推荐)叮当——中文语音对话机器人
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • .Net 8.0 新的变化
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .Net下的签名与混淆
  • .NET项目中存在多个web.config文件时的加载顺序
  • .NET性能优化(文摘)
  • .Net中的集合
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [AR]Vumark(下一代条形码)
  • [C++]类和对象【下】
  • [CERC2017]Cumulative Code
  • [CISCN 2019华东南]Web11
  • [CTO札记]盛大文学公司名称对联
  • [daily][archlinux][game] 几个linux下还不错的游戏
  • [Electron] 将应用打包成供Ubuntu、Debian平台下安装的deb包