本文参加了由公众号@若川视野 发起的每周源码共读活动, 点击了解详情一起参与。
【若川视野 x 源码共读】第36期 | 可能是历史上最简单的一期 omit.js 剔除对象中的属性点击了解本期详情一起参与。。
源码地址
学习内容概述
- 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
-
先去npm官网注册账号:www.npmjs.com/,或者通过终端命令注册… adduser
-
终端命令,登录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常用命令简介
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("关于每个功能或某个组件的单元测试",()=>{
// 不同用例的单元测试
})