第一篇源码共读,学点早该学会的东西

95 阅读2分钟

这篇笔记主要围绕三个topic。

测试用例

源码用的是 Node.js 的 assert API,考虑到项目中的实用性,我决定打开 Jest 文档,看看用 Jest 要怎么写。

第一步:安装包

npm install --save-dev jest

第二步:修改package.json

"scripts": {
  "test": "jest",
  "coverage": "jest --coverage"
}

然后我就迫不及待的运行了npm run test,发现了一个报错

syntaxerror: cannot use import statement outside a module

这个报错的原因是因为我没有配置babel转换es6语法,所以接下去

第三步:使用Babel

npm install --save-dev babel-jest @babel/core @babel/preset-env

然后在根目录下创建一个 babel.config.js 文件,里面写入

module.exports = {
  presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};

第四步:修改 index.test.js 文件

// import assert from 'assert';
// 还有assert相关的测试代码全部注释掉

test('should create a shallow copy', () => {
  const benjy = { name: 'Benjy' };
  const copy = omit(benjy, []);
  expect(benjy).toEqual(copy);
});

test('should drop fields which are passed in', () => {
  const benjy = { name: 'Benjy', age: 18 };
  expect(omit(benjy, ['age'])).toEqual({ name: 'Benjy' });
  expect(omit(benjy, ['name', 'age'])).toEqual({});
})

做完上述这些,我们再 npm run test,就可以得到满意的结果啦

 PASS  tests/index.test.js
  ✓ should create a shallow copy (2 ms)
  ✓ should drop fields which are passed in

Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        0.428 s, estimated 1 s
Ran all test suites.

我们还可以使用下 npm run coverage,可以得到如下

 tests/index.test.js
  ✓ should create a shallow copy (1 ms)
  ✓ should drop fields which are passed in

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |      100 |     100 |     100 |                   
 index.js |     100 |      100 |     100 |     100 |                   
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        0.517 s, estimated 1 s
Ran all test suites.

CommonJs 和 Es Module

这两个其实工作中一直在用的,也总是听到,但总是心里没有足够的底气敢说出他们到底是啥,只知道怎么用(捂脸...)

找到一篇不错的文章可以看,如果你也不是很清楚的话可以 点这里

如何发布一个npm包

这个部分因为感觉跟自己关系还不够强烈,所以我翻看了下评论区的笔记,发现有位同学写的挺详细的,感兴趣的可以 点这里