| 1 |
- {"numTotalTestSuites":23,"numPassedTestSuites":23,"numFailedTestSuites":0,"numPendingTestSuites":0,"numTotalTests":68,"numPassedTests":68,"numFailedTests":0,"numPendingTests":0,"numTodoTests":0,"snapshot":{"added":0,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0,"didUpdate":false},"startTime":1789185011507,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":["relay SDK endpoint"],"fullName":"relay SDK endpoint normalizes without duplicating v1 or losing a path prefix","status":"passed","title":"normalizes without duplicating v1 or losing a path prefix","duration":1.0712000000000899,"failureMessages":[],"meta":{}},{"ancestorTitles":["relay SDK endpoint"],"fullName":"relay SDK endpoint normalizes https://api.example without duplicating v1 or losing a path prefix","status":"passed","title":"normalizes https://api.example without duplicating v1 or losing a path prefix","duration":0.2702999999999065,"failureMessages":[],"meta":{}},{"ancestorTitles":["relay SDK endpoint"],"fullName":"relay SDK endpoint normalizes https://api.example/v1/ without duplicating v1 or losing a path prefix","status":"passed","title":"normalizes https://api.example/v1/ without duplicating v1 or losing a path prefix","duration":0.15909999999985303,"failureMessages":[],"meta":{}},{"ancestorTitles":["relay SDK endpoint"],"fullName":"relay SDK endpoint normalizes https://api.example/relay/v1/// without duplicating v1 or losing a path prefix","status":"passed","title":"normalizes https://api.example/relay/v1/// without duplicating v1 or losing a path prefix","duration":0.14450000000010732,"failureMessages":[],"meta":{}},{"ancestorTitles":["relay SDK endpoint"],"fullName":"relay SDK endpoint normalizes https://api.example/relay/?theme=dark#top without duplicating v1 or losing a path prefix","status":"passed","title":"normalizes https://api.example/relay/?theme=dark#top without duplicating v1 or losing a path prefix","duration":0.29729999999995016,"failureMessages":[],"meta":{}},{"ancestorTitles":["relay SDK endpoint"],"fullName":"relay SDK endpoint normalizes http://127.0.0.1:8080 without duplicating v1 or losing a path prefix","status":"passed","title":"normalizes http://127.0.0.1:8080 without duplicating v1 or losing a path prefix","duration":0.25480000000015934,"failureMessages":[],"meta":{}},{"ancestorTitles":["relay SDK endpoint"],"fullName":"relay SDK endpoint rejects an invalid or credential-bearing configuration: javascript:alert(1)","status":"passed","title":"rejects an invalid or credential-bearing configuration: javascript:alert(1)","duration":0.12789999999995416,"failureMessages":[],"meta":{}},{"ancestorTitles":["relay SDK endpoint"],"fullName":"relay SDK endpoint rejects an invalid or credential-bearing configuration: file:///etc/passwd","status":"passed","title":"rejects an invalid or credential-bearing configuration: file:///etc/passwd","duration":0.16980000000012296,"failureMessages":[],"meta":{}},{"ancestorTitles":["relay SDK endpoint"],"fullName":"relay SDK endpoint rejects an invalid or credential-bearing configuration: https://user:pass@api.example","status":"passed","title":"rejects an invalid or credential-bearing configuration: https://user:pass@api.example","duration":0.161200000000008,"failureMessages":[],"meta":{}},{"ancestorTitles":["relay SDK endpoint"],"fullName":"relay SDK endpoint rejects an invalid or credential-bearing configuration: /relative","status":"passed","title":"rejects an invalid or credential-bearing configuration: /relative","duration":0.13079999999990832,"failureMessages":[],"meta":{}},{"ancestorTitles":["relay SDK endpoint"],"fullName":"relay SDK endpoint rejects an invalid or credential-bearing configuration: broken address","status":"passed","title":"rejects an invalid or credential-bearing configuration: broken address","duration":0.06169999999997344,"failureMessages":[],"meta":{}}],"startTime":1789185013201,"endTime":1789185013204.17,"status":"passed","message":"","name":"C:/Users/30214/Desktop/sub2本地/sub2新站/frontend/src/composables/__tests__/useRelayEndpoint.spec.ts"},{"assertionResults":[{"ancestorTitles":["locale key completeness"],"fullName":"locale key completeness keeps English and Chinese locale schemas identical","status":"passed","title":"keeps English and Chinese locale schemas identical","duration":3.5181999999986147,"failureMessages":[],"meta":{}},{"ancestorTitles":["locale key completeness"],"fullName":"locale key completeness contains a non-empty message for every locale leaf","status":"passed","title":"contains a non-empty message for every locale leaf","duration":11.511099999999715,"failureMessages":[],"meta":{}},{"ancestorTitles":["locale key completeness"],"fullName":"locale key completeness contains every statically referenced production key","status":"passed","title":"contains every statically referenced production key","duration":2.569199999998091,"failureMessages":[],"meta":{}}],"startTime":1789185036442,"endTime":1789185036459.569,"status":"passed","message":"","name":"C:/Users/30214/Desktop/sub2本地/sub2新站/frontend/src/i18n/__tests__/localeKeyCompleteness.spec.ts"},{"assertionResults":[{"ancestorTitles":["resolveDocumentTitle"],"fullName":"resolveDocumentTitle 路由存在标题时,使用“路由标题 - 站点名”格式","status":"passed","title":"路由存在标题时,使用“路由标题 - 站点名”格式","duration":0.9014000000001943,"failureMessages":[],"meta":{}},{"ancestorTitles":["resolveDocumentTitle"],"fullName":"resolveDocumentTitle 路由无标题时,回退到站点名","status":"passed","title":"路由无标题时,回退到站点名","duration":0.13049999999998363,"failureMessages":[],"meta":{}},{"ancestorTitles":["resolveDocumentTitle"],"fullName":"resolveDocumentTitle 站点名为空时,回退默认站点名","status":"passed","title":"站点名为空时,回退默认站点名","duration":0.1255999999998494,"failureMessages":[],"meta":{}},{"ancestorTitles":["resolveDocumentTitle"],"fullName":"resolveDocumentTitle 站点名变更时仅影响后续路由标题计算","status":"passed","title":"站点名变更时仅影响后续路由标题计算","duration":0.07839999999987413,"failureMessages":[],"meta":{}},{"ancestorTitles":["resolveRouteDocumentTitle"],"fullName":"resolveRouteDocumentTitle 自定义页面菜单加载后,使用菜单名称作为标题","status":"passed","title":"自定义页面菜单加载后,使用菜单名称作为标题","duration":0.1516999999998916,"failureMessages":[],"meta":{}}],"startTime":1789185013019,"endTime":1789185013021.1516,"status":"passed","message":"","name":"C:/Users/30214/Desktop/sub2本地/sub2新站/frontend/src/router/__tests__/title.spec.ts"},{"assertionResults":[{"ancestorTitles":["useAppStore","Toast 消息管理"],"fullName":"useAppStore Toast 消息管理 showSuccess 创建 success 类型 toast","status":"passed","title":"showSuccess 创建 success 类型 toast","duration":3.5319999999999254,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","Toast 消息管理"],"fullName":"useAppStore Toast 消息管理 showError 创建 error 类型 toast","status":"passed","title":"showError 创建 error 类型 toast","duration":0.7094999999999345,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","Toast 消息管理"],"fullName":"useAppStore Toast 消息管理 showWarning 创建 warning 类型 toast","status":"passed","title":"showWarning 创建 warning 类型 toast","duration":0.5173999999999523,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","Toast 消息管理"],"fullName":"useAppStore Toast 消息管理 showInfo 创建 info 类型 toast","status":"passed","title":"showInfo 创建 info 类型 toast","duration":0.44230000000015934,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","Toast 消息管理"],"fullName":"useAppStore Toast 消息管理 toast 在指定 duration 后自动消失","status":"passed","title":"toast 在指定 duration 后自动消失","duration":0.8378999999999905,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","Toast 消息管理"],"fullName":"useAppStore Toast 消息管理 hideToast 移除指定 toast","status":"passed","title":"hideToast 移除指定 toast","duration":0.5190000000000055,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","Toast 消息管理"],"fullName":"useAppStore Toast 消息管理 clearAllToasts 清除所有 toast","status":"passed","title":"clearAllToasts 清除所有 toast","duration":0.633199999999988,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","Toast 消息管理"],"fullName":"useAppStore Toast 消息管理 hasActiveToasts 正确反映 toast 状态","status":"passed","title":"hasActiveToasts 正确反映 toast 状态","duration":0.7047999999999774,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","Toast 消息管理"],"fullName":"useAppStore Toast 消息管理 多个 toast 的 ID 唯一","status":"passed","title":"多个 toast 的 ID 唯一","duration":0.7626000000000204,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","侧边栏管理"],"fullName":"useAppStore 侧边栏管理 toggleSidebar 切换折叠状态","status":"passed","title":"toggleSidebar 切换折叠状态","duration":0.4337000000000444,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","侧边栏管理"],"fullName":"useAppStore 侧边栏管理 setSidebarCollapsed 直接设置状态","status":"passed","title":"setSidebarCollapsed 直接设置状态","duration":0.3191999999999098,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","侧边栏管理"],"fullName":"useAppStore 侧边栏管理 sidebarScrollTop 默认为 0 且可读写","status":"passed","title":"sidebarScrollTop 默认为 0 且可读写","duration":0.3057000000001153,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","侧边栏管理"],"fullName":"useAppStore 侧边栏管理 toggleMobileSidebar 切换移动端状态","status":"passed","title":"toggleMobileSidebar 切换移动端状态","duration":0.32780000000002474,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","Loading 状态管理"],"fullName":"useAppStore Loading 状态管理 setLoading 管理引用计数","status":"passed","title":"setLoading 管理引用计数","duration":0.332300000000032,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","Loading 状态管理"],"fullName":"useAppStore Loading 状态管理 setLoading(false) 不会使计数为负","status":"passed","title":"setLoading(false) 不会使计数为负","duration":0.30989999999997053,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","Loading 状态管理"],"fullName":"useAppStore Loading 状态管理 withLoading 自动管理 loading 状态","status":"passed","title":"withLoading 自动管理 loading 状态","duration":0.3251000000000204,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","Loading 状态管理"],"fullName":"useAppStore Loading 状态管理 withLoading 错误时也恢复 loading 状态","status":"passed","title":"withLoading 错误时也恢复 loading 状态","duration":0.9891000000000076,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","Loading 状态管理"],"fullName":"useAppStore Loading 状态管理 withLoadingAndError 错误时显示 toast 并返回 null","status":"passed","title":"withLoadingAndError 错误时显示 toast 并返回 null","duration":0.5292999999999211,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","reset"],"fullName":"useAppStore reset 重置所有 UI 状态","status":"passed","title":"重置所有 UI 状态","duration":0.3794000000000324,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","公开设置加载"],"fullName":"useAppStore 公开设置加载 并发调用复用并等待同一个请求,包括 force 调用","status":"passed","title":"并发调用复用并等待同一个请求,包括 force 调用","duration":1.080900000000156,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","公开设置加载"],"fullName":"useAppStore 公开设置加载 force 在无活动请求时绕过缓存,刷新期间的普通调用等待刷新结果","status":"passed","title":"force 在无活动请求时绕过缓存,刷新期间的普通调用等待刷新结果","duration":0.8348999999998341,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","公开设置加载"],"fullName":"useAppStore 公开设置加载 并发请求失败时所有调用得到 null,且不会标记设置已加载","status":"passed","title":"并发请求失败时所有调用得到 null,且不会标记设置已加载","duration":0.6156000000000859,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","公开设置加载"],"fullName":"useAppStore 公开设置加载 从 window.__APP_CONFIG__ 初始化","status":"passed","title":"从 window.__APP_CONFIG__ 初始化","duration":0.362999999999829,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","公开设置加载"],"fullName":"useAppStore 公开设置加载 无注入配置时返回 false","status":"passed","title":"无注入配置时返回 false","duration":0.2725000000000364,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","公开设置加载"],"fullName":"useAppStore 公开设置加载 clearPublicSettingsCache 清除缓存","status":"passed","title":"clearPublicSettingsCache 清除缓存","duration":0.31110000000012406,"failureMessages":[],"meta":{}},{"ancestorTitles":["useAppStore","公开设置加载"],"fullName":"useAppStore 公开设置加载 fetchPublicSettings(force) 会同步更新运行时注入配置","status":"passed","title":"fetchPublicSettings(force) 会同步更新运行时注入配置","duration":0.40949999999998,"failureMessages":[],"meta":{}}],"startTime":1789185013019,"endTime":1789185013036.4094,"status":"passed","message":"","name":"C:/Users/30214/Desktop/sub2本地/sub2新站/frontend/src/stores/__tests__/app.spec.ts"},{"assertionResults":[{"ancestorTitles":["HomeView compact mode"],"fullName":"HomeView compact mode renders custom HTML ahead of compact mode","status":"passed","title":"renders custom HTML ahead of compact mode","duration":14.551600000000008,"failureMessages":[],"meta":{}},{"ancestorTitles":["HomeView compact mode"],"fullName":"HomeView compact mode renders custom URL content ahead of compact mode","status":"passed","title":"renders custom URL content ahead of compact mode","duration":1.917699999999968,"failureMessages":[],"meta":{}},{"ancestorTitles":["HomeView compact mode"],"fullName":"HomeView compact mode treats whitespace-only custom content as empty and selects compact mode","status":"passed","title":"treats whitespace-only custom content as empty and selects compact mode","duration":8.986400000000003,"failureMessages":[],"meta":{}},{"ancestorTitles":["HomeView compact mode"],"fullName":"HomeView compact mode selects the default home when compact mode is undefined","status":"passed","title":"selects the default home when compact mode is undefined","duration":9.128799999999956,"failureMessages":[],"meta":{}},{"ancestorTitles":["HomeView compact mode"],"fullName":"HomeView compact mode selects the default home when compact mode is false","status":"passed","title":"selects the default home when compact mode is false","duration":6.514999999999873,"failureMessages":[],"meta":{}},{"ancestorTitles":["HomeView compact mode"],"fullName":"HomeView compact mode links unauthenticated visitors to login","status":"passed","title":"links unauthenticated visitors to login","duration":2.5692999999998847,"failureMessages":[],"meta":{}},{"ancestorTitles":["HomeView compact mode"],"fullName":"HomeView compact mode links authenticated users to their dashboard","status":"passed","title":"links authenticated users to their dashboard","duration":2.3595000000000255,"failureMessages":[],"meta":{}},{"ancestorTitles":["HomeView compact mode"],"fullName":"HomeView compact mode links administrators to the admin dashboard","status":"passed","title":"links administrators to the admin dashboard","duration":2.6344000000001415,"failureMessages":[],"meta":{}},{"ancestorTitles":["HomeView compact mode"],"fullName":"HomeView compact mode shows the model plaza link to anonymous visitors when public access is enabled","status":"passed","title":"shows the model plaza link to anonymous visitors when public access is enabled","duration":2.59719999999993,"failureMessages":[],"meta":{}},{"ancestorTitles":["HomeView compact mode"],"fullName":"HomeView compact mode hides the model plaza link from anonymous visitors when sign-in is required","status":"passed","title":"hides the model plaza link from anonymous visitors when sign-in is required","duration":2.4161000000001422,"failureMessages":[],"meta":{}},{"ancestorTitles":["HomeView compact mode"],"fullName":"HomeView compact mode shows the model plaza link to authenticated visitors when sign-in is required","status":"passed","title":"shows the model plaza link to authenticated visitors when sign-in is required","duration":1.9398000000001048,"failureMessages":[],"meta":{}},{"ancestorTitles":["HomeView compact mode"],"fullName":"HomeView compact mode shows the model plaza link in the default home header","status":"passed","title":"shows the model plaza link in the default home header","duration":4.582100000000082,"failureMessages":[],"meta":{}},{"ancestorTitles":["HomeView compact mode"],"fullName":"HomeView compact mode hides the model plaza link when the feature is disabled","status":"passed","title":"hides the model plaza link when the feature is disabled","duration":1.6544000000001233,"failureMessages":[],"meta":{}}],"startTime":1789185013272,"endTime":1789185013333.6543,"status":"passed","message":"","name":"C:/Users/30214/Desktop/sub2本地/sub2新站/frontend/src/views/__tests__/HomeView.compact.spec.ts"},{"assertionResults":[{"ancestorTitles":["AppSidebar custom SVG styles"],"fullName":"AppSidebar custom SVG styles does not override uploaded SVG fill or stroke colors","status":"passed","title":"does not override uploaded SVG fill or stroke colors","duration":0.8190999999999349,"failureMessages":[],"meta":{}},{"ancestorTitles":["AppSidebar scroll position persistence"],"fullName":"AppSidebar scroll position persistence binds a template ref to the sidebar nav element","status":"passed","title":"binds a template ref to the sidebar nav element","duration":0.1308000000001357,"failureMessages":[],"meta":{}},{"ancestorTitles":["AppSidebar scroll position persistence"],"fullName":"AppSidebar scroll position persistence declares sidebarNavRef in script setup","status":"passed","title":"declares sidebarNavRef in script setup","duration":0.06940000000008695,"failureMessages":[],"meta":{}},{"ancestorTitles":["AppSidebar scroll position persistence"],"fullName":"AppSidebar scroll position persistence saves scroll position on beforeUnmount","status":"passed","title":"saves scroll position on beforeUnmount","duration":0.11239999999997963,"failureMessages":[],"meta":{}},{"ancestorTitles":["AppSidebar scroll position persistence"],"fullName":"AppSidebar scroll position persistence restores scroll position on mount","status":"passed","title":"restores scroll position on mount","duration":0.09020000000009532,"failureMessages":[],"meta":{}},{"ancestorTitles":["AppSidebar collapsible groups"],"fullName":"AppSidebar collapsible groups lets the user collapse a group even while a child route is active","status":"passed","title":"lets the user collapse a group even while a child route is active","duration":0.09459999999990032,"failureMessages":[],"meta":{}},{"ancestorTitles":["AppSidebar header styles"],"fullName":"AppSidebar header styles does not clip the version badge dropdown","status":"passed","title":"does not clip the version badge dropdown","duration":0.20920000000000982,"failureMessages":[],"meta":{}}],"startTime":1789185012865,"endTime":1789185012867.2092,"status":"passed","message":"","name":"C:/Users/30214/Desktop/sub2本地/sub2新站/frontend/src/components/layout/__tests__/AppSidebar.spec.ts"},{"assertionResults":[{"ancestorTitles":["relay dashboard loading and recovery"],"fullName":"relay dashboard loading and recovery renders server stats and first-key onboarding without synthetic counts","status":"passed","title":"renders server stats and first-key onboarding without synthetic counts","duration":34.88200000000006,"failureMessages":[],"meta":{}},{"ancestorTitles":["relay dashboard loading and recovery"],"fullName":"relay dashboard loading and recovery keeps quick start reachable and recovers when stats fail then retry succeeds","status":"passed","title":"keeps quick start reachable and recovers when stats fail then retry succeeds","duration":10.734699999999975,"failureMessages":[],"meta":{}},{"ancestorTitles":["relay dashboard loading and recovery"],"fullName":"relay dashboard loading and recovery does not discard successful statistics when an independent balance request fails","status":"passed","title":"does not discard successful statistics when an independent balance request fails","duration":5.1172999999998865,"failureMessages":[],"meta":{}}],"startTime":1789185015046,"endTime":1789185015096.1172,"status":"passed","message":"","name":"C:/Users/30214/Desktop/sub2本地/sub2新站/frontend/src/views/user/__tests__/DashboardView.relay.spec.ts"}]}
|