- 本文参加了由公众号@若川视野 发起的每周源码共读活动, 点击了解详情一起参与。
- 这是源码共读的第36期,链接:juejin.cn/post/711878…
一.拉取代码
根据github仓库地址拉取代码到本地
一开始不了解应该怎么去做打包测试,然后看了下其他人写的笔记,又查找一些资料才明白,根据看目录中是否存在有文件名为fatherrc.js或者fatherrc.ts的即可判定打包工具为father
对比github中father这个包的用例可知与项目中的fatherrc.js类似
根据package.json可知,main引入文件为lib文件夹下的index.js
但是项目中并不存在lib文件夹,可知lib文件夹为代码打包后存在的文件夹
根据father的使用说明,运行打包命令是father build
执行打包命令
npm run compile
执行完毕后增加文件夹
二、单元测试(assert与jest)
之前没接触过单元测试,不了解测试的流程,因此参考了大佬的测试用例重写过程(juejin.cn/post/711970…)根据自己的理解再对代码进行测试
终端执行相关测试代码
npm run test
上面已经使用了assert进行单元测试,然后尝试使用另一种方法jest进行单元测试
在此之前去查看了一下jest的介绍:js测试方法
首先安装依赖
npm install --save-dev jest
或
yarn add --dev jest
安装过程中需要注意node版本问题,一般在18.0.0以上都不会出现报错
运行jest配置命令
npx jest --init
运行后package.json文件发生改变
更改test.js中assert的测试方法为jest测试方法
import omit from '../src';
describe('omit', () => {
it('should create a shallow copy', () => {
const benjy = { name: 'Benjy' };
const copy = omit(benjy, []);
expect(copy).toEqual(benjy)
});
it('should drop fields which are passed in', () => {
const benjy = { name: 'Benjy', age: 18 };
const target1 = omit(benjy, ['age'])
const target2 = omit(benjy, ['age', 'name'])
expect(target1).toEqual({ name: "Benjy"})
expect(target2).toEqual({})
});
});
运行测试
npm run test
发现报错,原因是jest是运行在node环境的,不支持es6语法,需要通过配置babel将es6语法转换为es5语法
然后安装配置babel
npm i babel-jest @babel/core @babel/preset-env -D
在根目录新建babel.config.js文件,添加如下配置:
module.exports = {
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": true
}
}
]
]
}
配置完成后再次运行:
npm run test
三、 总结
1. 了解新的打包运行方法father
2. 加深对object.assign()方法的理解,为一种浅拷贝方法,回顾浅拷贝与深拷贝的区别:
浅拷贝:通过拷贝建立新的栈,但栈中的地址不发生变化,与原对象的属性(数组或对象)指向的堆相同
深拷贝:利用递归,把原对象中所有属于对象的属性类型都遍历赋给拷贝对象。
3. 了解单元测试的两种方法
4. 解决jest运行环境报错问题