Files
X-Financial/web/tests/backend-health-timeout.test.mjs

44 lines
1.3 KiB
JavaScript
Raw Permalink Normal View History

import assert from 'node:assert/strict'
import { readFileSync } from 'node:fs'
import test from 'node:test'
import { fileURLToPath } from 'node:url'
import { checkBackendHealth, useBackendHealth } from '../src/composables/useBackendHealth.js'
const routerScript = readFileSync(
fileURLToPath(new URL('../src/router/index.js', import.meta.url)),
'utf8'
)
test('app route guard allows stale healthy state when health check times out', () => {
assert.match(routerScript, /checkBackendHealth\(\{\s*allowStaleOnTimeout:\s*true\s*\}\)/)
})
test('backend health timeout does not block app rendering when stale fallback is allowed', async () => {
const originalFetch = global.fetch
global.fetch = async (_url, options = {}) =>
new Promise((_, reject) => {
options.signal.addEventListener('abort', () => {
const error = new Error('aborted')
error.name = 'AbortError'
reject(error)
})
})
try {
const ok = await checkBackendHealth({
force: true,
allowStaleOnTimeout: true,
timeoutMs: 1
})
const { backendHealthy, backendError } = useBackendHealth()
assert.equal(ok, true)
assert.equal(backendHealthy.value, true)
assert.match(backendError.value, /健康检查超时|health/i)
} finally {
global.fetch = originalFetch
}
})