Element3.0升级日记 - TimeLine组件

5,935 阅读2分钟

如果你还不知道如何参加开源项目可以先阅读

【跟我一起编写Vue3版ElementUI】

一、初步调试

在/build/build-entry.js中将组件加入白名单

npm run dev

编译没出问题

浏览器打开 element.eleme.cn/#/zh-CN/com… 组件Example没有出来 发现有错误

断点调试一下

简单改一下

居然就OK了

哈哈 奥利给!!! 可以PR了

二、修改文件结构

调整后的结构 这个地方就不仔细说了。

三、VTU测试

接下来我们来重新编写测试Case,换用Vue3后需要使用vue-test-utils-next进行单元测试。 其实从写法上讲比原有的测试方案要简便很多。

参考 /unit/mocks/timeline.spec.js下面的测试用例

运行测试

jest packages/timeline --watch

测试代码如下

import Timeline from '../Timeline.vue'
import { mount } from '@vue/test-utils'
describe('Timeline.vue', () => {
  it('should slot works', () => {
    const wrapper = mount(Timeline, {
      slots: {
        default: [`A`, `B`]
      }
    })
    expect(wrapper.find('.el-timeline').text()).toBe('AB')
  })

  it('should props reverse works', () => {
    const wrapper = mount(Timeline, {
      props: {
        reverse: true
      },
      slots: {
        default: [`A`, `B`]
      }
    })
    expect(wrapper.find('.el-timeline').text()).toBe('BA')
  })

  it('should slot null', () => {
    const wrapper = mount(Timeline, {})
    expect(wrapper.find('.el-timeline').text()).toBe('')
  })

  it('should slot empty array', () => {
    const wrapper = mount(Timeline, {
      slots: {
        default: []
      }
    })
    expect(wrapper.find('.el-timeline').text()).toBe('')
  })
})

四、修改逻辑

实验中发下一个小bug 就是逆序属性修改后插槽中的元素没有响应重新排序。

经过调查发现这个是由于Vue的增加了Fragment节点造成的。也就是说如果插槽中的如果放入过个元素会增加Fragment节点。

这个本来是一个新特性。但是在这里需要增加相应的逻辑

修改后的结果

五、创建PR

相关ISSUE添加评论 github.com/kkbjs/eleme… 这样PR上面会有相关的显示

OK大功告成

参考资料

发现问题就是才是提高的机会

别忘了点赞收藏