【源码学习】omitjs源码学习

165 阅读2分钟

源码地址

学习内容概述

  • npm包发布及流程
  • Object.assgin()
  • jest单元测试

源码

function omit(obj, fields) {

// eslint-disable-next-line prefer-object-spread

const shallowCopy = Object.assign({}, obj);

for (let i = 0; i < fields.length; i += 1) {

const key = fields[i];

delete shallowCopy[key];

}

return shallowCopy;

}

export default omit;

【源码功能】复制一个新的对象,根据传入参数进行对象相应属性的删除,返回删除属性后的新对象

NPM包发布流程

  • 初始化npm包

初始化npm包需要配置package.json 相关信息:

  •          name - 包的名称,不能和已有的npm包重复。

  •           version - 包的版本号。

  •          description - 包的描述,发布到npm后你搜索该npm包时,在搜索联想列表里会显示在包名的下方,作为描述说明。

  •          author - 包的作者姓名。

  •          dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。

  •          repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。

  •          main - main 字段指定了程序的主入口文件,import或require(‘moduleName’) 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。

  • 注册/登录npm

  1.        先去npm官网注册账号:www.npmjs.com/,或者通过终端命令注册… adduser   

  2.       终端命令,登录npm账号:npm login,依次输入用户名和密码登录。

  • npm 本地调试

        1、npm项目根目录运行终端命令: npm link

        2、在其他项目中调试npm包,在该项目中终端命令 npm link 包名。简历npm包链接关联。在调试结束需使用npm unlink 包名,解除当前关联。

  • npm包发布

         在包项目下运行终端命令: npm publish即可发布。

Object.assgin()

   Object.assign() 方法将所有可枚举Object.propertyIsEnumerable() 返回 true)的自有Object.hasOwnProperty() 返回 true)属性从一个或多个源对象复制到目标对象,返回修改后的对象。(MDN文档:developer.mozilla.org/zh-CN/docs/…)

语法:

   Object.assign(target,...source)

   target:目标对象,接收源对象属性。

   source:源对象,即需要合并的对象,可接收多个源对象。

注:

   1、如果源对象中的属性与目标对象中的属性相同,则源对象中的属性会覆盖目标对象中的属性。

   2、源对象复制到目标对象使用的是浅拷贝,如果拷贝属性为引用类型,则仅会复制引用地址。修改会影响目标对象的属性值。

jest单元测试

   Jest是Facebook开源的一套JavaScript测试框架, 它集成了断言、JSDom、覆盖率报告等开发者所需要的所有测试工具。,可以使用vue-cli时手动选择测试框架,也可以在项目中使用npm或yarn安装。

jest官网www.jestjs.cn/docs/gettin…

jest常用命令简介

jest文件命名规范:测试文件名.test.js  或者测试文件名.spec.js 

测试函数

test("测试用列描述信息",()=>{

})
// or
it("测试用例描述信息",()=>{

})

断言函数

exspect(运行结果).toBe(期望的结果);
//常见断言方法
expect({a:1}).toBe({a:1})//判断两个对象是否相等
expect(1).not.toBe(2)//判断不等
expect({ a: 1, foo: { b: 2 } }).toEqual({ a: 1, foo: { b: 2 } })
expect(n).toBeNull(); //判断是否为null
expect(n).toBeUndefined(); //判断是否为undefined
expect(n).toBeDefined(); //判断结果与toBeUndefined相反
expect(n).toBeTruthy(); //判断结果为true
expect(n).toBeFalsy(); //判断结果为false
expect(value).toBeGreaterThan(3); //大于3
expect(value).toBeGreaterThanOrEqual(3.5); //大于等于3.5
expect(value).toBeLessThan(5); //小于5
expect(value).toBeLessThanOrEqual(4.5); //小于等于4.5
expect(value).toBeCloseTo(0.3); // 浮点数判断相等
expect('Christoph').toMatch(/stop/); //正则表达式判断
expect(['one','two']).toContain('one'); //不解释

分组函数,将一个模块或一个功能放在一个分组函数中进行测试

describe("关于每个功能或某个组件的单元测试",()=>{
    // 不同用例的单元测试
})

参考文章:

blog.csdn.net/u010059669/…

developer.mozilla.org/zh-CN/docs/…

zhuanlan.zhihu.com/p/282835230