Skip to content

[finding] object-formobject-master-detail-form 在 binding-reach 探针的自动 fixture 下渲染成错误卡(reading 'map')—— 断言仍成立,但两个分支的崩溃守卫因此没法一起开 #3840

Description

@yinlianghui

发现于 #3808 的实施过程:给 public-block-binding-reach.test.tsx 的 ledgered 分支加崩溃守卫时,顺手把守卫加到了两个分支上,于是这两个块立刻红了 —— 它们一直在这个探针里渲染成错误卡,只是没人看。#3808 的 PR 已把守卫收窄回 ledgered 分支(那才是它的改动可能造成的空绿),这两条另记本单。

按 observation-class 只贴 finding、不排队:这两个块的断言本身仍然成立(见下),所以今天没有假绿,请 triage 决定是产品缺陷还是 fixture 缺陷。

事实(objectui origin/main @ c85268256 + #3808 分支)

apps/console/src/__tests__/public-block-binding-reach.test.tsxsampleFor 按每个 block 声明的 inputs 自动填一份 schema,然后挂载并记录数据层调用。把「渲染没崩」这一条也断言上之后:

× object-form asks the data layer for its objectName
  <object-form> threw during render …
  Component "object-form" failed to render
  Cannot read properties of undefined (reading 'map')

× object-master-detail-form asks the data layer for its objectName
  Component "object-master-detail-form" failed to render
  Cannot read properties of undefined (reading 'map')

其余 14 个候选块全部渲染正常。

为什么今天不是假绿

这两个块不在 NO_DATA_REACH 里,所以它们走的是「必须有数据调用」那一支:

expect(reached.length, …).toBeGreaterThan(0);

实测它们确实发出了带 PROBE_OBJECT 的调用 —— 崩溃发生在取到数据之后的某一趟渲染里,不是在 fetch 之前。所以断言是挣来的,不是靠「什么都没产出」蒙的。

对比 ledgered 分支(如 record:related_list)就完全不同:那里的通过条件是「没有数据调用」,一个崩掉的块恰好满足它 —— 那才是必须堵的空绿,#3808 堵的就是那一处。

两种可能,需要 triage 分辨

分辨成本很低:把 sampleFor 生成的 schema 打出来,逐个 input 换成 undefined 二分,定位到具体那一条,再看该 input 的 spec 形状是不是允许样本那种值。

附带的建议

无论 (a) 还是 (b),这个探针最终都应该像它的兄弟 record-block-record-reach.test.tsx 那样对两个分支都断言「渲染没崩」(那个文件里叫 assertRendered)。现在只有 ledgered 分支有,是因为 #3808 不该把两个 pre-existing 崩溃拖进一个补 inputs 声明的 PR。这两条修掉之后,守卫就可以提到断言之前、对所有候选生效。

参考位置

  • apps/console/src/__tests__/public-block-binding-reach.test.tsx —— sampleFor(样本生成)、dataCallsFor(现在会把 html 一起带出来)、ledgered 分支的崩溃守卫
  • apps/console/src/__tests__/record-block-record-reach.test.tsx —— assertRendered,两分支通用守卫的现成形状

关联:#3808#3838#3149、objectstack#4472、objectstack#4413

Metadata

Metadata

Assignees

Labels

domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repo

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions