test(post_detail): 锁定 slug 重取不再依赖镜像 signal

防止 post_detail.rs 回退到 render 期 set signal 反模式(commit 225bb24 已修)。
用源码字符串契约断言,与 theme.rs 的 preload-script 测试同模式。
This commit is contained in:
xfy 2026-06-26 09:34:17 +08:00
parent afebd441ae
commit 015edc5b6a

View File

@ -0,0 +1,26 @@
//! 回归测试:锁定 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——违反渲染纯净性。"
);
}