yggdrasil/tests/post_detail_slug_rerun.rs
xfy 015edc5b6a test(post_detail): 锁定 slug 重取不再依赖镜像 signal
防止 post_detail.rs 回退到 render 期 set signal 反模式(commit 225bb24 已修)。
用源码字符串契约断言,与 theme.rs 的 preload-script 测试同模式。
2026-06-26 09:34:17 +08:00

27 lines
1.3 KiB
Rust
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.

//! 回归测试:锁定 PostDetail 组件不再用镜像 signal 触发 server future。
//!
//! 背景src/pages/post_detail.rs 曾用 `use_signal(|| slug.clone())` 镜像 slug prop
//! 并在 render 期 `if slug_signal() != slug { slug_signal.set(...) }` 触发重取——
//! 这是 Dioxus antipatterns 明确点名的「render body 副作用」。
//! 已在 commit 225bb24 改为直接读 prop。本测试通过源码字符串断言防止回退。
/// PostDetail 组件源码不得包含镜像 slug 的 signal 反模式签名。
#[test]
fn post_detail_does_not_mirror_slug_into_signal() {
let src = include_str!("../src/pages/post_detail.rs");
// 反模式签名:用 use_signal 镜像 slug prop。
assert!(
!src.contains("slug_signal"),
"post_detail.rs 重新引入了 slug_signal 镜像——这是 render 期 set signal 反模式。\
应直接在 use_server_future 闭包里读 slug prop让 Dioxus 在 prop 变化时自动重跑。\
详见 .agents/skills/dioxus-render-purity/SKILL.md 规则一。"
);
// 反模式签名render 期对 slug 相关 signal 调用 set。
assert!(
!src.contains("slug_signal.set"),
"post_detail.rs 在 render 期 set signal——违反渲染纯净性。"
);
}