前几天在基础API上面转了一下 如今准备向原理源码进军了。有个小问题先要处理一下。就是研究一下如何把Vue3的单元测试跑起来。毕竟光读代码不运行是没有灵魂的。歪歪一下中国的球迷是否是就是光看不踢。html
Vue3代码是基于Jest进行测试,咱们先简单看看什么是jestvue
Jest 是Facebook的一个专门进行Javascript单元测试的工具,适合JS、NodeJS使用,具备零配置、内置代码覆盖率、强大的Mocks等特色。react
总之目前来说JS界Jest是一套比较成体系的测试工具。为何这么说呢好比拿之前的测试框架Mocha对比 他只是一个测试框架,若是你须要断言还须要专门的断言库好比assert shoud expect等等 若是须要Mock还须要住啊们的库来支持很不方便。不过Jest基本上能够一次性搞定。npm
Jest测试代码和逻辑代码是听从约定优于配置(convention over configuration)其实这个也是目前编程世界广泛接受的原则。编程
Jest的测试代码是基于如下约定json
其实这个规定相似于Maven对于测试代码和逻辑代码的约定只是test目录换成了__tests__浏览器
下面咱们具体看一下Vue3源码的目录结构bash
其实逻辑代码和测试代码对应放置仍是很方便的 咱们再看看另一个reactive这个包框架
package.json文件中已经配置好了jest 函数
npm run test
复制代码
咱们增长一个参数把覆盖率跑出来
npx jest --coverage
复制代码
实际上跑覆盖率的时候是有错的 咱们先不去管他 咱们先解析一下这个报告怎么看,若是你们学过软件工程会知道通常从理论上讲覆盖率包括
可是通常来说不一样框架理解不同 在Jest这里大概是这样分解的
好比咱们看看vue的index这个测试
有两种方法进行单独测试
// 全局安装
npm i jest -g
jest index
// 或者更更简便一点
npx jest index
复制代码
import { createApp } from '../src'
it('should support on-the-fly template compilation', () => {
const container = document.createElement('div')
const App = {
template: `{{ count }}`,
data() {
return {
count: 0
}
}
}
createApp().mount(App, container)
// 断言
expect(container.innerHTML).toBe(`0`)
})
复制代码
声明中说为了确认模板编译能够生效,这个就是一个简单的数据绑定 最后 断言也是看了一下 count是否为 0 这个例子其实除了断言部分其实直接拷贝到第一次讲的那个html文件里面是能够运行的。
npx jest reactive --coverage
复制代码
好了后面咱们就能够开始向源码进军了