- 本文参加了由公众号@若川视野 发起的每周源码共读活动, 点击了解详情一起参与。
- 这是源码共读的第36期,链接:点这里。**
这篇笔记主要围绕三个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包
这个部分因为感觉跟自己关系还不够强烈,所以我翻看了下评论区的笔记,发现有位同学写的挺详细的,感兴趣的可以 点这里