Closed clark-t closed 5 years ago
Files with Coverage Reduction | New Missed Lines | % | ||
---|---|---|---|---|
src/runtime.js | 2 | 81.82% | ||
<!-- | Total: | 2 | --> |
Totals | |
---|---|
Change from base Build 1081: | 0.1% |
Covered Lines: | 3852 |
Relevant Lines: | 3991 |
导致问题发生的根本原因是:当前 Travis CI 的运行环境在执行 async/await 语法有问题,在表现上一个 try { await promise } catch (e) {/* 进入错误 */}
这样进入 catch 的过程需要消耗两个 microTask,在本地 Chrome 浏览器环境下运行实际上只需要一个 microTask。有点类似于:
promise.then(() => {}, error => {/* 出错 */})
和 promise.then(() => {}).catch(error => {/* 出错 */})
的区别。
其次,我们的单测没有经过任何 Babel 处理,istanbul-instrumenter-loader
只是对代码做了覆盖率检测的逻辑插入,esModules: true
的配置项并不会对代码做任何 Babel 编译。因此在 Travis CI 执行的时候实际上是跑的包含 ES6/ES7 代码的例子,单测无法覆盖任何兼容性检测。
经排查发现是因为,dev 版的 polyfill 里面包含对 es7.promise.finally 的功能支持,从目前测试的情况来看,大概率是某段代码(浏览器原生 JS)里面会检测 Promise.prototype.finally 是否存在然后分别走了不同的逻辑,从而使得未升级 Babel 之前能够正常跑过单测。
本次升级 Babel 没有添加这个 finally 的 polyfill,因此 Travis CI 单测没过,后面补上之后就 OK 了。
测试内容:
相关 ISSUE: (ISSUE 链接地址)
536
前置 PR: https://github.com/mipengine/mip-components-webpack-helpers/pull/1
1、升级点 (清晰准确的描述升级的功能点)
2、影响范围 (描述该需求上线会影响什么功能)
3、自测 Checklist
4、需要覆盖的场景和 Case
5、自测机型和浏览器