Skip to content

packages/client/tests/integration/ 不在任何 tsconfig 里,且其中的 client.discovery 是早已不存在的属性(集成套件对着一个不存在的 API 断言) #5544

Description

@baozhoutao

#5449@objectstack/client 新建 tsconfig.test.json 时量到。基线 origin/main @ 9894a723e

事实

packages/client/tsconfig.jsoninclude["src/**/*"],tsconfig.test.json(#5449 新增)沿用同一个根。packages/client/tests/integration/01-discovery.test.ts 落在 src/ 之外,没有任何 exclude 指名它,因此从来不在任何 tsc program 里 —— 与 #5476 记录的 packages/metadata-core/test/ 是同一种形状(include 之外,不是 exclude 之内),而不是 #5286/#5449 那种「被排除区盖住」的形状。

把它临时纳入编译后量到 1 文件 / 3 条错误:

tests/integration/01-discovery.test.ts(41,14): error TS18048: 'discovery.apiName' is possibly 'undefined'.
tests/integration/01-discovery.test.ts(61,21): error TS2339: Property 'discovery' does not exist on type 'ObjectStackClient'.
tests/integration/01-discovery.test.ts(62,21): error TS2339: Property 'discovery' does not exist on type 'ObjectStackClient'.

后两条是真实的 API 漂移:ObjectStackClient 上没有 discovery 这个属性(发现结果存在私有的 discoveryInfo 上,见 packages/client/src/index.ts:361)。集成套件在对着一个不存在的表面断言。

为什么现在没人发现

该套件由 pnpm --filter @objectstack/client test:integrationvitest.integration.config.ts 单独跑,需要一台在跑的服务器,CI 的常规 test 任务用 vitest.config.ts 明确把 tests/integration/** 排除掉。于是:vitest 不跑它,tsc 不读它 —— 两条通道都不看。

处置建议(未在 #5449 的 PR 里做)

#5449 的 PR 照 #5478 的先例把 include 停在 src,并在 tsconfig.test.json 的注释里写明这个洞留给独立单:那 3 条里有 1 条是真实缺陷,混进「把幽灵 pin 变真」的 PR 会把两件事搅在一起。该文件不含任何 @ts-expect-error,所以 PINS_CHECKED 不受影响,没有 pin 藏在里面。

修的时候两件事一起:把 tests/**/* 纳入 tsconfig.test.jsoninclude,并修 discovery 断言(改成读真实表面,或补上确实该有的公开 API —— 后者是契约面,需定案)。

关联:#5449#5476#5286#4311

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions