Files
ArtPlayer/refactor/vast-validation.md
T

61 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# VAST 测试维护
当前完成 PKG-VAST-01/02;生产重构由03/04继续。来源见
[实际契约](baselines/vast-contract.md)、[VAST/SDK归档](baselines/vast-release.json)
和 [核心5.1.7归档](baselines/vast-core.json)。工作区1.2.0不是npm发布版本。
03检查点:新增`test/vast-lifecycle.test.js`的15项候选修复断言,冻结工作区全部失败、
当前5个TS模块全部通过;现有测试共60项Node、117项浏览器通过。覆盖终止/回调失败、
初始化回滚、活动广告重建、旧事件、配置getter和SDK同步重入;完整CI900项通过。
该文件已纳入`yarn test:vast`和`test:unit`。实际资源所有权见
[包内架构](../packages/artplayer-plugin-vast/ARCHITECTURE.md);
[初始化冲突](vast-compatibility-decision.md)未决定,03仍doing。以下缺陷清单保留历史
来源,不代表候选实现仍包含这些已获可控修复证据的问题;真实IMA验收仍待05。
## 文件与执行
- `test/helpers/vast-sdk.js`:可在Node和浏览器使用的SDK记录器,控制加载、构造、
监听、请求、销毁失败和晚到事件;不实现IMA、广告请求或主片暂停恢复。
- `test/helpers/vast.js`:只在精确的`@glomex/vast-ima-player`导入边界替换SDK。
当前JS/TS入口可打包加载;两套历史源码必须来自哈希验证的npm归档/Git内容。
Node宿主仅提供事件和DOM所有权意图,不模拟布局或视频解码。
- `test/vast.test.js`:共享契约、工作区新增功能、独立的历史缺陷观察。
修复时为当前候选增加正确行为断言,保留历史缺陷复现,不能把旧缺陷移入共享契约。
- `test/browser/vast.spec.js`:三真实浏览器×三核心,测试异步注册、加载失败、真实
DOM显隐、显式清理重建、主片解码/切源和销毁后晚到初始化。SDK仍是同一受控记录器。
- `refactor/scripts/vast-core.test.mjs`:实际5.1.7 tarball、197成员和发布关联检查。
- `refactor/scripts/vast-contract*.mjs`:VAST及SDK归档、真实发布导出和冻结源码契约。
使用仓库固定Node24.21.0与Yarn1.22.22:`yarn test:vast`、`yarn test:baseline`、
`yarn test:browser vast.spec.js`。Node用例纳入`test:unit`,浏览器用例由常规Playwright
流程发现。8084浏览器运行串行执行;每次报告/完整results先归档再开启下一轮。
所有失败日志保留;不改超时、不加重试、不能把外部SDK受控替换说成供应商服务通过。
## 已复现问题与修复入口
VAST-LIFE-01由源码观察提升为受控运行复现,问题如下:
1. 核心destroy不清理SDK;真实浏览器中旧插件在核心销毁后仍能分配到已脱离文档的player。
2. SDK加载中销毁后仍执行callback并初始化。
3. callback拒绝后已分配SDK和容器保留。
4. callback等待中销毁,恢复后仍可请求广告。
5. SDK构造失败后容器不回滚。
6. 同毫秒多个实例产生重复ID。
7. 工作区活动广告destroy后状态未复位,新的play请求被永久忽略。
8. 工作区晚到SDK回调在destroy后抛错,重建后可污染替代容器与状态。
9. 工作区SDK destroy抛错阻止DOM及引用清理。
10. 工作区事件注册失败后留下不完整SDK,下一次init错误地认为它已就绪。
03应建立明确的生命周期/SDK/DOM所有权,并区分可重建的显式广告destroy与终止性的
核心destroy。04处理准确类型、SDK声明依赖和同步误声明;初始化冲突应以发布及
工作区消费者证据明确处置,Ads的专属类型批准不能扩展到VAST。
## 验证边界
这些测试不是实际Google IMA加载、广告加载/播放/跳过/内容恢复的验收,也没有检查
物理移动设备或最终npm tarball。SDK记录器对load错误、constructor错误、destroy错误
使用精确注入;Node固定Date.now用于同毫秒ID复现,未改变生产时钟。
只有实际VAST外部脚本持续因VPN无法加载时,可按用户授权记录并跳过该网络验证;
它不豁免类型、生命周期或其他包。到02为止未用该例外。03~06和SDK-07继续开放。