import TableSetting from './TableSetting'; // 假设 TableSetting.ts 文件的路径为 './TableSetting'
// 模拟 runtime 接口 const mockRuntime = { postWorkspaceMessage: jest.fn(), };
// 模拟应用设置数据 const mockAppSetting = { myStorageKey: { version: 1, setting: {} }, };
describe('TableSetting', () => { let tableSetting: ReturnType;
beforeEach(() => { // 每次测试前都创建一个新的 TableSetting 实例 tableSetting = TableSetting('myStorageKey', {}, 1); // 设置模拟的 runtime 对象 (tableSetting as any).runtime = mockRuntime; // 使用 as any 来绕过类型检查 });
afterEach(() => { // 清除模拟的 runtime 对象 jest.clearAllMocks(); });
it('initializes correctly', async () => { await tableSetting.init(); // 在初始化时应该调用 postWorkspaceMessage 方法 expect(mockRuntime.postWorkspaceMessage).toHaveBeenCalledWith('getAppSetting'); });
it('gets setting correctly', async () => { // 设置模拟的应用设置数据 mockRuntime.postWorkspaceMessage.mockResolvedValue(mockAppSetting);
const setting = await tableSetting.get();
// 在获取设置时应该调用 postWorkspaceMessage 方法,并返回应用设置中的指定键名的设置信息
expect(mockRuntime.postWorkspaceMessage).toHaveBeenCalledWith('getAppSetting');
expect(setting).toEqual([]);
});
it('sets setting correctly', async () => { const newSetting = [{ id: 1, name: 'Column 1', hide: false }];
await tableSetting.set(newSetting);
// 在设置新设置时应该调用两次 postWorkspaceMessage 方法
expect(mockRuntime.postWorkspaceMessage).toHaveBeenCalledTimes(2);
// 第一次调用时应该传入 'getAppSetting',第二次调用时应该传入 'setAppSetting' 并包含新设置信息
expect(mockRuntime.postWorkspaceMessage).toHaveBeenNthCalledWith(1, 'getAppSetting');
expect(mockRuntime.postWorkspaceMessage).toHaveBeenNthCalledWith(2, 'setAppSetting', {
data: {
myStorageKey: { version: 1, setting: newSetting },
},
});
});
it('resets setting correctly', async () => { await tableSetting.reset(); // 在重置设置时应该调用两次 postWorkspaceMessage 方法 expect(mockRuntime.postWorkspaceMessage).toHaveBeenCalledTimes(2); // 第一次调用时应该传入 'getAppSetting',第二次调用时应该传入 'setAppSetting' 并包含空设置信息 expect(mockRuntime.postWorkspaceMessage).toHaveBeenNthCalledWith(1, 'getAppSetting'); expect(mockRuntime.postWorkspaceMessage).toHaveBeenNthCalledWith(2, 'setAppSetting', { data: { myStorageKey: { version: 1, setting: {} }, }, }); }); });