JavaScript Testing Notes
Testing Pyramid
- Unit testing.
 - Module testing.
 - Integration testing.
 - System testing.
 - E2E testing.
 
Testing Model
PIE Model
- (Execution) Fault.
 - (Infection) Error.
 - (Propagation) Failure.
 
Heuristic Test Strategy Model
软件功能测试 (难以实现完全自动化):
- 关注价值(Value):用户得到价值
 - 风险驱动(Risk):降低价值/用户体验的风险项
 - 产品元素(Product Elements)
 - 结构(Structure):产品物理元素(如代码、硬件、配置文件)
 - 功能(Function):产品功能
 - 数据(Data):产品所操作的数据(如输入、输出)
 - 接口(Interface):产品所使用/暴露出的接口
 - 平台(Platform):产品所依赖的外部 元素(如操作系统、输入/输出设备)
 - 操作(Operation):产品被使用的方式(如键盘、鼠标、触摸等命令操作)
 - 时间(Time):影响产品的时间因素
 - 组合元素:测试产品功能间协作
 
User Experience Testing
对软件功能测试的有益补充:
- 功能性体验
 - 易用性体验
 - 性能体验
 - 可靠性体验(如软件兼容性)
 
Mobile Testing
- 机型碎片化.
 - 屏幕碎片化.
 - 环境碎片化.
 - 耗电量.
 
Testing Design
FAIR Principle
- Fast tests: break down into small separate and well structured tests.
 - Automated tests.
 - Isolated tests: any particular test should not depend on any others.
 - Repeatable tests:
mock everything you can't control:
- 3rd-party libraries.
 - 3rd-party APIs.
 - Timer API: 
jest.useFakerTimers()/jest.advanceTimersByTime()/cy.clock(). DateAPI:jest.spyOn(Date.prototype)/cy.tick().Math.random()API:jest.spyOn()/jest.mock()/cy.stub().
 - 如果不能保持测试套件的确定性和速度, 那么它将成为生产力的障碍.
 
AAA Pattern
Structure every test to 3 part code:
- Arrange.
 - Act.
 - Assert.
 
Test-Driven Development
Test-Driven Development Upside
- Reduce costs: find bugs early.
 - Reduce fear and anxiety.
 - Lead to better-designed and more testable code.
 - Make tests more thorough (彻底的). Easy to refactor legacy code.
 
Test-Driven Development Use Case
- Pure function.
- 工具函数.
 - 数据转换函数.
 - 后端接口函数.
 
 - Bug fix:
- Add failed testing first.
 - One bug fixed, one or more testing added.
 
 - UI interaction.
 
测试路径
起始顶点至终止顶点.
Testing Methods
Basic Testing Types
- Positive tests: valid inputs, verify functions.
 - Negative tests:
invalid inputs (e.g 
null/undefined/''/mismatch type/mismatch structure) verify robustness. - Exception tests:
expect(api()).toThrow(error). - Bottom-up testing: gives more granular feedback but slows down iteration speed.
 - Top-down testing: allows to iterate more quickly but will generate more coarse feedback.
 
图结构覆盖方法
- 顶点覆盖,边覆盖,边对覆盖(三顶点,两邻边)
 - VC/EC/EPC 法
 
数据流覆盖方法
- 数据流覆盖:定义处覆盖,使用处覆盖
 - DU 法(Data&Use)