/**
* 缓存单元测试示例
*/
import { LRUCache } from '../utils/cache';
describe('LRU Cache', () => {
let cache: LRUCache<string, string>;
beforeEach(() => {
cache = new LRUCache({ maxSize: 3, defaultTtl: 1000 });
});
test('基本 get/set 操作', () => {
cache.set('key1', 'value1');
expect(cache.get('key1')).toBe('value1');
});
test('TTL 过期测试', async () => {
cache.set('key1', 'value1', 100); // 100ms TTL
expect(cache.get('key1')).toBe('value1');
await new Promise((resolve) => setTimeout(resolve, 150));
expect(cache.get('key1')).toBeNull();
});
test('LRU 策略测试', () => {
cache.set('key1', 'value1');
cache.set('key2', 'value2');
cache.set('key3', 'value3');
// 访问 key1,使其成为最近使用
cache.get('key1');
// 添加新项,会删除 key2(最久未使用)
cache.set('key4', 'value4');
expect(cache.get('key1')).toBe('value1'); // 应该存在
expect(cache.get('key2')).toBeNull(); // 已被删除
expect(cache.get('key3')).toBe('value3'); // 应该存在
expect(cache.get('key4')).toBe('value4'); // 应该存在
});
test('清理过期缓存', () => {
cache.set('key1', 'value1', 100);
cache.set('key2', 'value2', 200);
const cleaned = cache.cleanup();
expect(cleaned).toBeGreaterThanOrEqual(1);
});
});