\Tests\FeatureLogErrorMiddlewareTest

错误日志中间件

被测对象:LogErrorMiddleware::handle(捕获 → 落 td_log_sys_error → 原样重抛) 守护约定:运行时异常完整落库(异常名/消息/堆栈/位置/请求快照/链路); 参数校验与 4xx HTTP 异常属业务拒绝不入表; 写库失败仅告警,业务异常仍原样传播。

Summary

Methods
Properties
Constants
test_runtime_exception_is_recorded_and_rethrown()
test_validation_exception_is_not_recorded()
test_not_found_exception_is_not_recorded()
test_log_failure_does_not_swallow_exception()
No public properties found
No constants found
requireRedis()
buildCacheRegistry()
setUp()
No protected properties found
N/A
middleware()
No private properties found
N/A

Methods

test_runtime_exception_is_recorded_and_rethrown()

test_runtime_exception_is_recorded_and_rethrown() : void

运行时异常:完整落库(异常名/消息/堆栈/请求快照/链路)并原样重抛

test_validation_exception_is_not_recorded()

test_validation_exception_is_not_recorded() : void

参数校验异常属业务拒绝:不入错误表,仍原样重抛

test_not_found_exception_is_not_recorded()

test_not_found_exception_is_not_recorded() : void

4xx HTTP 异常(404)属客户端错误:不入错误表

test_log_failure_does_not_swallow_exception()

test_log_failure_does_not_swallow_exception() : void

写库失败不吞业务异常:错误表缺失时系统异常仍原样传播

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

建 td_log_sys_error 最小 schema(sqlite :memory: 自建,与生产迁移列对齐)

middleware()

middleware() : \App\Http\Middleware\LogErrorMiddleware

构造被测中间件(无依赖注入,直接实例化)

Returns

\App\Http\Middleware\LogErrorMiddleware —