|
|
@@ -47,6 +47,60 @@ jest.mock('../../src/components/AreaPicker', () => ({
|
|
|
})
|
|
|
}))
|
|
|
|
|
|
+// Mock API 客户端
|
|
|
+jest.mock('../../src/api', () => ({
|
|
|
+ areaClient: {
|
|
|
+ provinces: {
|
|
|
+ $get: jest.fn(() => Promise.resolve({
|
|
|
+ status: 200,
|
|
|
+ json: () => Promise.resolve({
|
|
|
+ success: true,
|
|
|
+ data: {
|
|
|
+ provinces: [
|
|
|
+ { id: 1, name: '北京市' },
|
|
|
+ { id: 2, name: '上海市' },
|
|
|
+ { id: 3, name: '广东省' }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ message: ''
|
|
|
+ })
|
|
|
+ }))
|
|
|
+ },
|
|
|
+ cities: {
|
|
|
+ $get: jest.fn(() => Promise.resolve({
|
|
|
+ status: 200,
|
|
|
+ json: () => Promise.resolve({
|
|
|
+ success: true,
|
|
|
+ data: {
|
|
|
+ cities: [
|
|
|
+ { id: 11, name: '北京市' },
|
|
|
+ { id: 22, name: '上海市' },
|
|
|
+ { id: 33, name: '广州市' }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ message: ''
|
|
|
+ })
|
|
|
+ }))
|
|
|
+ },
|
|
|
+ districts: {
|
|
|
+ $get: jest.fn(() => Promise.resolve({
|
|
|
+ status: 200,
|
|
|
+ json: () => Promise.resolve({
|
|
|
+ success: true,
|
|
|
+ data: {
|
|
|
+ districts: [
|
|
|
+ { id: 101, name: '朝阳区' },
|
|
|
+ { id: 202, name: '浦东新区' },
|
|
|
+ { id: 303, name: '天河区' }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ message: ''
|
|
|
+ })
|
|
|
+ }))
|
|
|
+ }
|
|
|
+ }
|
|
|
+}))
|
|
|
+
|
|
|
// Mock TabBarLayout 组件
|
|
|
jest.mock('@/layouts/tab-bar-layout', () => ({
|
|
|
TabBarLayout: jest.fn(({ children, activeKey, className }) => (
|
|
|
@@ -384,8 +438,15 @@ describe('首页集成测试', () => {
|
|
|
// 设置出发地
|
|
|
const startLocationButton = screen.getByText('出发地').closest('button')
|
|
|
fireEvent.click(startLocationButton!)
|
|
|
- const confirmButton = screen.getByTestId('area-picker-confirm')
|
|
|
- fireEvent.click(confirmButton)
|
|
|
+
|
|
|
+ // 等待出发地选择器显示
|
|
|
+ await waitFor(() => {
|
|
|
+ expect(screen.getByTestId('area-picker')).toBeInTheDocument()
|
|
|
+ expect(screen.getByTestId('area-picker-title')).toHaveTextContent('选择出发地')
|
|
|
+ })
|
|
|
+
|
|
|
+ const startConfirmButton = screen.getByTestId('area-picker-confirm')
|
|
|
+ fireEvent.click(startConfirmButton)
|
|
|
|
|
|
// 等待出发地设置完成
|
|
|
await waitFor(() => {
|
|
|
@@ -395,7 +456,15 @@ describe('首页集成测试', () => {
|
|
|
// 设置目的地
|
|
|
const endLocationButton = screen.getByText('目的地').closest('button')
|
|
|
fireEvent.click(endLocationButton!)
|
|
|
- fireEvent.click(confirmButton)
|
|
|
+
|
|
|
+ // 等待目的地选择器显示
|
|
|
+ await waitFor(() => {
|
|
|
+ expect(screen.getByTestId('area-picker')).toBeInTheDocument()
|
|
|
+ expect(screen.getByTestId('area-picker-title')).toHaveTextContent('选择目的地')
|
|
|
+ })
|
|
|
+
|
|
|
+ const endConfirmButton = screen.getByTestId('area-picker-confirm')
|
|
|
+ fireEvent.click(endConfirmButton)
|
|
|
|
|
|
// 等待目的地设置完成
|
|
|
await waitFor(() => {
|
|
|
@@ -456,10 +525,10 @@ describe('首页集成测试', () => {
|
|
|
})
|
|
|
|
|
|
test('应该使用环境变量配置的默认目的地', async () => {
|
|
|
- // 设置环境变量
|
|
|
- process.env.TARO_APP_DEFAULT_END_PROVINCE_ID = '4'
|
|
|
- process.env.TARO_APP_DEFAULT_END_CITY_ID = '5'
|
|
|
- process.env.TARO_APP_DEFAULT_END_DISTRICT_ID = '6'
|
|
|
+ // 设置环境变量 - 使用mock中存在的地区ID
|
|
|
+ process.env.TARO_APP_DEFAULT_END_PROVINCE_ID = '2'
|
|
|
+ process.env.TARO_APP_DEFAULT_END_CITY_ID = '22'
|
|
|
+ process.env.TARO_APP_DEFAULT_END_DISTRICT_ID = '202'
|
|
|
|
|
|
render(
|
|
|
<Wrapper>
|
|
|
@@ -469,7 +538,7 @@ describe('首页集成测试', () => {
|
|
|
|
|
|
// 等待组件处理环境变量
|
|
|
await waitFor(() => {
|
|
|
- // 检查目的地不再显示"请选择地区",而是显示其他文本(可能是"未知地区"或实际的地区名称)
|
|
|
+ // 检查目的地不再显示"请选择地区",而是显示其他文本
|
|
|
const pleaseSelectText = screen.queryByText('请选择地区')
|
|
|
expect(pleaseSelectText).not.toBeInTheDocument()
|
|
|
|
|
|
@@ -477,6 +546,12 @@ describe('首页集成测试', () => {
|
|
|
const destinationButtons = screen.getAllByText(/出发地|目的地/)
|
|
|
const destinationButton = destinationButtons.find(btn => btn.textContent === '目的地')
|
|
|
expect(destinationButton).toBeInTheDocument()
|
|
|
+
|
|
|
+ // 检查目的地显示的不是"请选择地区",而是其他文本
|
|
|
+ // 由于地区数据未加载,会显示"未知地区 未知地区 未知地区"
|
|
|
+ const destinationText = destinationButton?.parentElement?.querySelector('.text-gray-800')
|
|
|
+ expect(destinationText).not.toHaveTextContent('请选择地区')
|
|
|
+ expect(destinationText).toHaveTextContent('未知地区 未知地区 未知地区')
|
|
|
})
|
|
|
})
|
|
|
|