编写可测试的javas
1. 可测试的JavaScript
.....
2. 复杂度
复杂度代表糟糕,简单代表美好
衡量复杂度: JSLint,圈复杂度,代码行数,扇入和扇出
我们会花费50%的时间在调试和测试我们的代码
认识问题是解决问题的第一步,了解项目的复杂度问题所在,然后一个个解决
代码尽量减少
函数最好保持读写分离
圈复杂度是表示代码中独立现行路径的数量
function sum(a, b) {
if (typeof(a) !== typeof(b)) {
throw new Error('Cannot sum different types!');
} else {
return a + b ;
}
}
这里的话圈复杂度为2
有人说: 任何方法的圈复杂度都不应该大于10
可以使用jscheckstyle && Jenkins把圈JS文件的圈复杂度计算出来
如果发现代码被编写了两遍,就应该抽取出来了
2.5 扇出
过程A的扇出是表示过程A的内部流程数量与过程A所更新的数据结构数量之和.
下次操作当做一个内部流程
- 如果A调用B
- 如果B调用A,并且A返回一个B随后可以利用的值
- 如果C调用A和B,且A的返回值传递给B
2.6 扇入
过程A的扇入是过程A的内部流程数量与欲从过程A中获取信息的数据结构数量之和
2.7耦合
内容耦合: 例如外部对象O被其他对象修改,耦合分数为5
O.property = 'blah'; O.method = function(){};
- 公共耦合: 两个对象共享另外一个全局变量,耦合分数为4
- 控制耦合: 用参数来设置外部对象,耦合分数为3
- 印记耦合: 向外部对象传递一个记录,而只使用该记录的一部分,耦合分数为2
- 数据耦合: 一个对象传递给另一个对象消息数据,而没有传递控制外部对象的参数时.
- 无耦合
代码审查时查找代码耦合一个很好的方法
YUIdocjs 可以转注释为HTML
3. 基于事件的架构
可以参考基于socket.io的样例实现
npm install EventHub
启动 npm start EventHub
4. 单元测试
最难编写的的单元是第一个单元测试
测试框架最重要的是将测试聚合到测试套件和测试用例当中
一个模块的所有测试归类到一个单独的测试套件当中
一个好的单元测试最重要的是隔离和作用域
4.3 编写好的单元测试
4.3.1隔离
单元测试测试的是代码的最小部分-方法