\Tests\FeatureCacheInvalidationTimingTest

缓存失效时序

被测对象:模型事件(saved/deleting)驱动的缓存失效(CacheManager::invalidateByTableDeferred) 守护约定(铁律):事务内触发的事件失效延迟到 afterCommit(事务中途缓存保持旧值不动); 事务回滚不失效(DB 未变缓存不该清);事务外触发立即失效。

Summary

Methods
Properties
Constants
test_transaction_commit_invalidates_after_commit()
test_transaction_rollback_keeps_cache_intact()
test_non_transactional_event_invalidates_immediately()
No public properties found
No constants found
requireRedis()
buildCacheRegistry()
setUp()
No protected properties found
N/A
makeDept()
$user
N/A

Properties

$user

$user : \App\Models\SysUser

Type

SysUser

Methods

test_transaction_commit_invalidates_after_commit()

test_transaction_commit_invalidates_after_commit() : void

铁律 1:事务内触发的事件不立即失效,提交后才失效(global 层 + user 层双通道)

test_transaction_rollback_keeps_cache_intact()

test_transaction_rollback_keeps_cache_intact() : void

铁律 2:事务回滚 → 缓存完全不动(DB 未变,无需清,也不得清)

test_non_transactional_event_invalidates_immediately()

test_non_transactional_event_invalidates_immediately() : void

铁律 3:事务外触发的事件立即失效(更新 saved 在持久化后,无窗口)

requireRedis()

requireRedis() : void

Redis 依赖探针:直连 Redis 的测试(限流/会话/验证码)在无 Redis 环境(如 CI) 跳过而非失败——其余用例不受影响。CI 可设 TEST_REQUIRE_REDIS=1 强制模式: Redis 不可达即失败而非跳过,安全回归套件不允许静默消失。

buildCacheRegistry()

buildCacheRegistry(array  $items) : void

建缓存注册表最小 schema(td_sys_cache)并灌入注册项。

测试跑 sqlite :memory:,生产迁移含 PostgreSQL 专属 DDL 跑不通(DataScopeServiceTest 同因自建 schema); 而 CacheManager::registry() 现已从数据库表读取——凡走注册表的测试(remember/get/key/失效推导) 必须在 setUp 先调用本方法,否则注册表为空、remember 未登记名会走「自动登记」路径。

Parameters

array $items

setUp()

setUp() : void

makeDept()

makeDept() : \App\Models\SysDept

Returns

\App\Models\SysDept —