Ctrl K
ComunidadGuías…

frontend/test/settings-store.test.ts

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
/* 界面偏好那一份真相:壳原地改字段,落盘时通知订阅者;面板靠版本号知道要重画。 */
import { beforeEach, expect, it, vi } from 'vitest';

import { createSettingsStore } from '../src/settings-store';

beforeEach(() => localStorage.clear());

it('存的是壳手里那个对象本身,原地改完落盘就是改后的值', () => {
  const value = { theme: 'system', batchSize: 60 };
  const store = createSettingsStore('peach.settings.v1', value);
  value.theme = 'dark';
  store.save();
  expect(store.value).toBe(value);
  expect(JSON.parse(localStorage.getItem('peach.settings.v1')!)).toEqual({ theme: 'dark', batchSize: 60 });
});

it('每次落盘换一个版本号并通知订阅者;退订之后不再收到', () => {
  const store = createSettingsStore('k', { on: true });
  const listener = vi.fn();
  const stop = store.subscribe(listener);
  const before = store.version();
  store.save();
  expect(store.version()).toBe(before + 1);
  expect(listener).toHaveBeenCalledTimes(1);
  stop();
  store.save();
  expect(listener).toHaveBeenCalledTimes(1);
});

it('值在别的键上时只通知不落盘', () => {
  const store = createSettingsStore('k', { on: true });
  const listener = vi.fn();
  store.subscribe(listener);
  store.notify();
  expect(listener).toHaveBeenCalledTimes(1);
  expect(localStorage.getItem('k')).toBeNull();
});