omit.js包初体验

76 阅读2分钟

一.拉取代码

根据github仓库地址拉取代码到本地

image.png

一开始不了解应该怎么去做打包测试,然后看了下其他人写的笔记,又查找一些资料才明白,根据看目录中是否存在有文件名为fatherrc.js或者fatherrc.ts的即可判定打包工具为father

对比github中father这个包的用例可知与项目中的fatherrc.js类似

image (1).png

根据package.json可知,main引入文件为lib文件夹下的index.js

但是项目中并不存在lib文件夹,可知lib文件夹为代码打包后存在的文件夹

image (2).png

根据father的使用说明,运行打包命令是father build

image (3).png

执行打包命令
npm run compile

image (4).png

执行完毕后增加文件夹

image (5).png

二、单元测试(assert与jest)

之前没接触过单元测试,不了解测试的流程,因此参考了大佬的测试用例重写过程(juejin.cn/post/711970…)根据自己的理解再对代码进行测试

终端执行相关测试代码
npm run test

image (6).png

上面已经使用了assert进行单元测试,然后尝试使用另一种方法jest进行单元测试

在此之前去查看了一下jest的介绍:js测试方法

image (7).png

首先安装依赖

npm install --save-dev jest
或
yarn add --dev jest

image (8).png

安装过程中需要注意node版本问题,一般在18.0.0以上都不会出现报错

运行jest配置命令

npx jest --init

运行后package.json文件发生改变

image (9).png

更改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

image (10).png

发现报错,原因是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

image (11).png

三、  总结

1.  了解新的打包运行方法father

2.  加深对object.assign()方法的理解,为一种浅拷贝方法,回顾浅拷贝与深拷贝的区别:

浅拷贝:通过拷贝建立新的栈,但栈中的地址不发生变化,与原对象的属性(数组或对象)指向的堆相同

深拷贝:利用递归,把原对象中所有属于对象的属性类型都遍历赋给拷贝对象。

3.  了解单元测试的两种方法

4.  解决jest运行环境报错问题