describe('library page', () => { afterEach(() => { delete global.Page delete global.wx jest.resetModules() }) test('exposes mock categories and featured books by default', () => { let capturedPageConfig global.Page = config => { capturedPageConfig = config } const libraryPageModule = require('../pages/library/index') const pageData = typeof libraryPageModule.createLibraryPageData === 'function' ? libraryPageModule.createLibraryPageData() : capturedPageConfig?.data expect(libraryPageModule.createLibraryPageData).toEqual(expect.any(Function)) expect(pageData.title).toBe('典籍') expect(pageData.searchButtonText).toBe('搜索') expect(pageData.activeCategoryId).toBe('featured') expect(pageData.currentCategoryName).toBe('精选') expect(pageData.categories).toHaveLength(9) expect(pageData.categories.map(item => item.name)).toEqual([ '精选', '注解', '经论', '伤寒金匮', '医方', '本草', '针灸', '医案', '综合' ]) expect(pageData.visibleBooks).toHaveLength(6) expect(pageData.visibleBooks[0]).toEqual( expect.objectContaining({ id: 'huangdi-neijing-suwen', title: '黄帝内经素问', author: '王冰次', dynasty: '唐', period: '公元762年' }) ) }) test('switches visible books when another category is selected', () => { let capturedPageConfig global.Page = config => { capturedPageConfig = config } require('../pages/library/index') const pageInstance = { data: { ...(capturedPageConfig.data || {}) }, setData(update) { this.data = { ...this.data, ...update } } } capturedPageConfig.handleCategoryTap.call(pageInstance, { currentTarget: { dataset: { categoryId: 'annotation' } } }) expect(pageInstance.data.activeCategoryId).toBe('annotation') expect(pageInstance.data.currentCategoryName).toBe('注解') expect(pageInstance.data.visibleBooks).toEqual([ expect.objectContaining({ title: '黄帝内经素问集注' }), expect.objectContaining({ title: '神农本草经辑注' }), expect.objectContaining({ title: '难经集注' }) ]) }) test('shows a toast while search is still mocked', () => { let capturedPageConfig global.Page = config => { capturedPageConfig = config } global.wx = { showToast: jest.fn() } require('../pages/library/index') capturedPageConfig.handleSearchTap() expect(global.wx.showToast).toHaveBeenCalledWith( expect.objectContaining({ title: '搜索功能暂未开放', icon: 'none' }) ) }) test('adds a visible mingli-hall bridge entry to the library tab', () => { let capturedPageConfig global.Page = config => { capturedPageConfig = config } global.wx = { navigateTo: jest.fn(), showToast: jest.fn() } const libraryPageModule = require('../pages/library/index') const pageData = libraryPageModule.createLibraryPageData() expect(pageData.domainBridge).toEqual( expect.objectContaining({ title: '进入易学阁', route: '/packages/mingli/pages/hall/index' }) ) capturedPageConfig.handleDomainBridgeTap() expect(global.wx.navigateTo).toHaveBeenCalledWith({ url: '/packages/mingli/pages/hall/index' }) }) })