Files
MetonaSqlark/jest.config.cjs
T
thzxx c1c3036abd fix(site/v0.8.0): 站点版本同步 + 现场失败修复(file:// 打不开 OPFS 的可操作错误)
用户报告"站点演示失败了",实测复现并定位根因:

- 现象:直接双击 site/demo.html(file://)→ 点「🌲 Aria」→
  " 数据库初始化失败: Failed to open AriaEngine database "demo""(Memory 正常)。
- 根因:file:// 属不透明来源,Chromium 拒绝 navigator.storage.getDirectory()
  并抛 SecurityError;此时 isSecureContext 仍为 true、API 也存在,无法提前探测。
  引擎把它包成 ARIA_OPEN_ERROR 时丢掉了底层错误 → 消息对用户不可操作。
- 修复:OPFSBackend.open() 显式检查并抛 ARIA_OPFS_UNAVAILABLE,消息给出两条出路
  (用 http(s) 打开 / 改用 mode:'memory'),原始 SecurityError 挂 cause;
  site/demo.html 额外用中文说明"为什么失败 + 怎么修"。

顺带修掉一个更普遍的问题:DatabaseError 的第三个参数只进 details,err.cause
恒为 undefined,而文档/注释多处写"底层错误作为 cause 保留"。现在两者都成立
(details 语义不变;cause 声明为公开字段并接入标准错误链)。

站点版本同步:demo.html(title / 状态栏 / SQL 预置脚本 / console 日志)与
benchmark.html(title)此前仍是 v0.7.4(日志甚至是 v0.4.2)→ 统一 v0.8.0;
docs.html 的 AriaEngine 版本演进列表补上 v0.8.0 条目、错误码表补
ARIA_OPFS_UNAVAILABLE;README 补"OPFS 需要 http(s) 页面"的浏览器兼容说明。

回归与门禁:tests/engine/aria-opfs-unavailable.test.ts(5 项,含正常环境正控);
变异 R19 / R20 均被拦住(总计 42/42);93 套件 / 1985 用例;覆盖率
90.59 / 82.61 / 94.14 / 93.50(阈值 90/82/94/93);e2e 14/14;lint + 两份 tsc 干净;
dist 重建(251,731 B / gzip 63,431 B)并已同步全部体积宣称。
2026-09-15 17:09:29 +08:00

63 lines
2.6 KiB
JavaScript
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.
module.exports = {
testEnvironment: 'jsdom',
setupFiles: ['./jest.setup.js'],
transform: {
'^.+\\.ts$': 'babel-jest',
},
transformIgnorePatterns: [
'/node_modules/(?!(@rollup)/)',
],
moduleFileExtensions: ['ts', 'js', 'json'],
// 默认 testMatch 不会发现 __tests__ 之外、名为 helpers/ 目录里的 .test.ts 文件,
// 因此显式声明匹配规则(v0.8.0:测试基座自身的自测放在 tests/helpers/ 下)。
testMatch: ['**/*.test.ts'],
// Playwright e2etests/e2e/)不属于 jest 单元测试
testPathIgnorePatterns: [
'/node_modules/',
'/tests/e2e/',
],
//
// v0.8.0 覆盖率口径修正(根治):
//
// 此前为 `'!src/**/index.ts'` —— 这条 glob 把 15 个文件整体排除,其中包含
// src/engine/aria/index.tsAriaEngine 主实现 2282 行)、src/engine/kvstore/index.ts
// KVStore 本体)、src/hybrid/index.ts、src/migration/index.ts 等**实现文件**
// 而非桶文件。后果:发布的"90.1% 行覆盖率"只在约 75% 的可执行源码上成立,
// 且 v0.2.6 曾在 CHANGELOG 里承认过同类问题("91.0% 为排除 Aria 模块的陈旧数据")
// 后又在 v0.5.1 以另一种写法复发。
//
// 现在只排除**确实没有可执行语句**的文件(纯类型声明),并且逐个显式列出、
// 附理由 —— 新增文件默认纳入统计,不会再被 glob 静默吞掉。
//
collectCoverageFrom: [
'src/**/*.ts',
// 纯类型声明:可执行语句 0 行(接口/类型别名),纳入统计只会稀释分母
'!src/engine/interface.ts',
'!src/query/ast.ts',
],
coverageDirectory: 'coverage',
coverageReporters: ['text', 'lcov'],
//
// v0.8.0 覆盖率门禁(此前完全不存在:jest.config 与 CI 都没有任何阈值,
// 覆盖率从 90% 掉到 60% 也全绿)。
//
// 阈值 = 在**修正口径后**(不再排除实现文件)实测的真实基线,下取整到整数百分点。
// 历史基线(2026-08-15):Statements 90.66% / Branches 82.94% / Functions 94.36% / Lines 93.43%
// v0.8.0 收尾实测(2026-09-151985 用例):Statements 90.59% / Branches 82.61% /
// Functions 94.14% / Lines 93.50%
//
coverageThreshold: {
global: {
statements: 90,
branches: 82,
functions: 94,
lines: 93,
},
},
verbose: true,
// 注意:forceExit 会掩盖句柄/定时器泄漏。v0.8.0 保留它以便常规开发快速迭代,
// 但新增了独立的 `npm run test:leaks`--detectOpenHandles 且不 forceExit)用于泄漏检查。
forceExit: true,
testTimeout: 15000,
};