feat: migrate static pages to native tabbar
This commit is contained in:
169
tests/home-page.test.js
Normal file
169
tests/home-page.test.js
Normal file
@@ -0,0 +1,169 @@
|
||||
describe('home page', () => {
|
||||
afterEach(() => {
|
||||
delete global.Page
|
||||
delete global.wx
|
||||
jest.resetModules()
|
||||
})
|
||||
|
||||
test('exposes static home sections without custom bottom navigation data', () => {
|
||||
let capturedPageConfig
|
||||
|
||||
global.Page = config => {
|
||||
capturedPageConfig = config
|
||||
}
|
||||
|
||||
const homePageModule = require('../pages/home/index')
|
||||
const pageData =
|
||||
typeof homePageModule.createHomePageData === 'function'
|
||||
? homePageModule.createHomePageData()
|
||||
: capturedPageConfig?.data
|
||||
|
||||
expect(homePageModule.createHomePageData).toEqual(expect.any(Function))
|
||||
expect(pageData.brandName).toBe('玄知中医')
|
||||
expect(pageData.quickLinks).toBeUndefined()
|
||||
expect(pageData.floatingActions).toBeUndefined()
|
||||
expect(pageData.encyclopediaTitle).toBe('中医百科')
|
||||
expect(pageData.toolsTitle).toBe('学习工具')
|
||||
expect(pageData.wellnessTitle).toBe('养生调理')
|
||||
expect(pageData.classicsTitle).toBe('热门典籍')
|
||||
expect(pageData.classicsActionText).toBe('进入书城')
|
||||
expect(pageData.encyclopediaCards).toHaveLength(3)
|
||||
expect(pageData.toolCards).toHaveLength(4)
|
||||
expect(pageData.wellnessCards).toHaveLength(3)
|
||||
expect(pageData.classicsBooks).toHaveLength(4)
|
||||
expect(pageData.bottomNavItems).toBeUndefined()
|
||||
})
|
||||
|
||||
test('adds direct portal cards for tcm, mingli, bazi and learning routes', () => {
|
||||
let capturedPageConfig
|
||||
|
||||
global.Page = config => {
|
||||
capturedPageConfig = config
|
||||
}
|
||||
|
||||
global.wx = {
|
||||
switchTab: jest.fn(),
|
||||
navigateTo: jest.fn()
|
||||
}
|
||||
|
||||
const homePageModule = require('../pages/home/index')
|
||||
const pageData = homePageModule.createHomePageData()
|
||||
|
||||
expect(pageData.portalTitle).toBe('学习入口')
|
||||
expect(pageData.portalCards).toEqual([
|
||||
expect.objectContaining({ key: 'tcm-library', title: '中医馆' }),
|
||||
expect.objectContaining({ key: 'mingli-hall', title: '易学阁' }),
|
||||
expect.objectContaining({ key: 'bazi', title: '八字排盘' }),
|
||||
expect.objectContaining({ key: 'learning-center', title: '学习中心' })
|
||||
])
|
||||
|
||||
capturedPageConfig.handlePortalTap({
|
||||
currentTarget: {
|
||||
dataset: {
|
||||
route: '/pages/library/index'
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
capturedPageConfig.handlePortalTap({
|
||||
currentTarget: {
|
||||
dataset: {
|
||||
route: '/packages/mingli/pages/hall/index'
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
expect(global.wx.switchTab).toHaveBeenCalledWith({
|
||||
url: '/pages/library/index'
|
||||
})
|
||||
expect(global.wx.navigateTo).toHaveBeenCalledWith({
|
||||
url: '/packages/mingli/pages/hall/index'
|
||||
})
|
||||
})
|
||||
|
||||
test('wires search, feature cards and classics interactions to route-first actions', () => {
|
||||
let capturedPageConfig
|
||||
|
||||
global.Page = config => {
|
||||
capturedPageConfig = config
|
||||
}
|
||||
|
||||
global.wx = {
|
||||
switchTab: jest.fn(),
|
||||
navigateTo: jest.fn(),
|
||||
showToast: jest.fn()
|
||||
}
|
||||
|
||||
const homePageModule = require('../pages/home/index')
|
||||
const pageData = homePageModule.createHomePageData()
|
||||
|
||||
expect(pageData.searchRoute).toBe('/packages/tcm/pages/search-books/index')
|
||||
expect(pageData.encyclopediaCards).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({ key: 'classic', route: '/pages/library/index' })
|
||||
])
|
||||
)
|
||||
expect(pageData.classicsBooks).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
key: 'huangdi-neijing-suwen',
|
||||
route: '/packages/tcm/pages/book-detail/index?scene=classic-a'
|
||||
})
|
||||
])
|
||||
)
|
||||
|
||||
capturedPageConfig.handleSearchTap()
|
||||
capturedPageConfig.handleEncyclopediaTap({
|
||||
currentTarget: {
|
||||
dataset: {
|
||||
route: '/pages/library/index',
|
||||
title: '经典书城'
|
||||
}
|
||||
}
|
||||
})
|
||||
capturedPageConfig.handleToolTap({
|
||||
currentTarget: {
|
||||
dataset: {
|
||||
route: '/pages/ai/index',
|
||||
title: 'AI问答'
|
||||
}
|
||||
}
|
||||
})
|
||||
capturedPageConfig.handleWellnessTap({
|
||||
currentTarget: {
|
||||
dataset: {
|
||||
title: '药膳'
|
||||
}
|
||||
}
|
||||
})
|
||||
capturedPageConfig.handleClassicActionTap()
|
||||
capturedPageConfig.handleClassicTap({
|
||||
currentTarget: {
|
||||
dataset: {
|
||||
route: '/packages/tcm/pages/book-detail/index?scene=classic-a',
|
||||
title: '黄帝内经素问'
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
expect(global.wx.navigateTo).toHaveBeenNthCalledWith(1, {
|
||||
url: '/packages/tcm/pages/search-books/index'
|
||||
})
|
||||
expect(global.wx.switchTab).toHaveBeenNthCalledWith(1, {
|
||||
url: '/pages/library/index'
|
||||
})
|
||||
expect(global.wx.switchTab).toHaveBeenNthCalledWith(2, {
|
||||
url: '/pages/ai/index'
|
||||
})
|
||||
expect(global.wx.showToast).toHaveBeenCalledWith({
|
||||
title: '药膳待开放',
|
||||
icon: 'none'
|
||||
})
|
||||
expect(global.wx.switchTab).toHaveBeenNthCalledWith(3, {
|
||||
url: '/pages/library/index'
|
||||
})
|
||||
expect(global.wx.navigateTo).toHaveBeenNthCalledWith(2, {
|
||||
url: '/packages/tcm/pages/book-detail/index?scene=classic-a'
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user