$templateType, 'coreEngineSrc' => '/build/core/template-engine.min.js', 'componentsSrc' => '/api/templates/assets/sirsoft-basic/js/components.iife.js', 'initConfig' => ['templateId' => 'sirsoft-basic', 'locale' => 'ko'], ])->render(); } public function test_두_진입점_모두_사유별_분기를_렌더한다(): void { foreach (['user', 'admin'] as $templateType) { $html = $this->render($templateType); $this->assertStringContainsString( "? 'incompatible' : 'corrupt'", $html, "[{$templateType}] 전역 부재 경로가 SyntaxError 관측 결과로 사유를 가르지 않는다" ); $this->assertStringContainsString( "renderFallback('network')", $html, "[{$templateType}] 재시도 소진 경로가 network 사유를 넘기지 않는다" ); $this->assertStringContainsString( 'data-g7-bootstrap-fallback', $html, "[{$templateType}] 폴백 사유 마커가 없다" ); } } public function test_파싱_오류_관측_리스너가_설치된다(): void { $html = $this->render(); // 파싱 실패는