关于参与10k星开源项目的那些事

267 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情

pr路程

之前试着给vueuse提了几次pr,总结一下,算是一个小开头。说实话 vueuse 到现在我都没在业务场景用过😂

单元测试与fixbug

fix(useAxios): args param need limit (#1343)

群里面的小伙伴@我,说自己在给vueuse提pr,作者希望他可以给useAxios模块添加测试用例。因为小伙伴没有接触过测试,便拜托经常扶老奶奶过马路的我来帮忙,闲来无事,顺便还可以学习下Anthony Fu大佬的代码,便应承下来

我进去老哥的pr,具体看了下代码和文档,然后根据输入输出写测试,vueuse 的测试工具用的是自家的 vitest。编写完后,运行测试有问题,喵了喵源码,发现小伙伴代码没改对,给他调整了下。最后与作者密切交流♂后,合并分支,第一个pr就完成🌶

单元测试优化

test(useAxios): Add waitUntilFinished logic case (#1363)

第一版的 useAxios 测试,我为了判断接口什么时候返回,用 watch 函数来监听data.value

import { watch } from 'vue-demi'
const { isFinished, data } = useAxios(url)
watch(
      // data.value是useAxios的接口返回值
      () => data.value,
      (result) => {
        expect(Object.keys(result).length > 0).toBeTruthy()
        // macrotask
        setTimeout(() => {
          expect(isFinished.value).toBeTruthy()
          done()
        })
      },
    )

但后面发现 useAxios 返回一个方法then, 它用来注册接口返回的回调,便把watch替换掉

then((result) => {
      expect(Object.keys(data.value).length > 0).toBeTruthy()
      expect(result.data).toBe(data)
      expect(isFinished.value).toBeTruthy()
      expect(onRejected).toBeCalledTimes(0)
      done()
    }, onRejected)

useChangeCase

feat(integrations): add useChangeCase (#1371)

基于change-case封装了一个useChangeCase模块,一个模块主要有功能、文档、demo和测试,剩下的具体可以看看pr的代码。

workflow: support debug single vitest test file in vscode (#1372)

中间给项目加了一个vscode调试vitest的配置文件,在作者的建议下拆成两个pr

扩展useAxios

feat(useAxios): allow not passing url in constructor (#1388)

#1347老哥的场景,他需要一个不用传url也可以使用的useAxios,但目前使用useAxios是必须要传url才可以使用。

然后我基于自己的见解提出了自己的方案#1374,这是一个好习惯,你如果想为这个库做点什么的时候,最好先提issue跟作者和其他开发者交流意见。功能实现起来还好,主要是参数变得太灵活了,ts跟测试要大改

结语

以上是我为vueuse提的几个简单pr,后面因为我缺乏业务场景,给其他人捉到了其他问题,哈哈哈。