同步 sgs-frontend-mobile 源码
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
lyf
2026-07-27 11:26:01 +08:00
parent 575dca430f
commit 9ea1bfab71
181 changed files with 24395 additions and 5212 deletions

View File

@@ -0,0 +1,95 @@
import { afterEach, describe, expect, it, vi } from 'vitest'
import {
createBackgroundPreloadScheduler,
getBackgroundPreloadPolicy
} from '@/services/performance/backgroundPreloadScheduler'
describe('backgroundPreloadScheduler', () => {
afterEach(() => {
vi.useRealTimers()
})
it('waits for an idle window after the defer delay', () => {
vi.useFakeTimers()
let idleCallback: (() => void) | null = null
const task = vi.fn()
const scheduler = createBackgroundPreloadScheduler({
setTimeout,
clearTimeout,
requestIdleCallback: (callback) => {
idleCallback = () => callback({ didTimeout: false })
return 1
},
cancelIdleCallback: vi.fn()
})
expect(scheduler.schedule(task, { delayMs: 500 })).toBe(true)
vi.advanceTimersByTime(499)
expect(task).not.toHaveBeenCalled()
vi.advanceTimersByTime(1)
expect(task).not.toHaveBeenCalled()
idleCallback?.()
expect(task).toHaveBeenCalledTimes(1)
})
it('cancels work that has not entered the idle window', () => {
vi.useFakeTimers()
const task = vi.fn()
const scheduler = createBackgroundPreloadScheduler({
setTimeout,
clearTimeout,
requestIdleCallback: vi.fn(() => 1),
cancelIdleCallback: vi.fn()
})
scheduler.schedule(task, { delayMs: 500 })
scheduler.cancel()
vi.advanceTimersByTime(1000)
expect(task).not.toHaveBeenCalled()
})
it('skips background work for data-saving and slow-network connections', () => {
expect(getBackgroundPreloadPolicy({ saveData: true })).toEqual({
allowed: false,
reason: 'save-data',
delayMs: 0
})
expect(getBackgroundPreloadPolicy({ effectiveType: '2g' })).toEqual({
allowed: false,
reason: 'slow-network',
delayMs: 0
})
expect(getBackgroundPreloadPolicy({ effectiveType: 'slow-2g' })).toEqual({
allowed: false,
reason: 'slow-network',
delayMs: 0
})
expect(getBackgroundPreloadPolicy({ effectiveType: '4g', downlink: 1.49, rtt: 80 })).toEqual({
allowed: false,
reason: 'slow-network',
delayMs: 0
})
expect(getBackgroundPreloadPolicy({ effectiveType: '4g', downlink: 8, rtt: 500 })).toEqual({
allowed: false,
reason: 'slow-network',
delayMs: 0
})
expect(getBackgroundPreloadPolicy({ effectiveType: '3g', downlink: 1.2, rtt: 120 })).toEqual({
allowed: false,
reason: 'slow-network',
delayMs: 0
})
expect(getBackgroundPreloadPolicy({ effectiveType: '3g' })).toEqual({
allowed: true,
reason: 'normal',
delayMs: 2400
})
expect(getBackgroundPreloadPolicy({ effectiveType: '4g', downlink: 1.5, rtt: 499 })).toEqual({
allowed: true,
reason: 'normal',
delayMs: 900
})
})
})