| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- import { describe, it, expect, vi, beforeEach } from 'vitest'
- import { render, screen, fireEvent } from '@testing-library/react'
- import Taro from '@tarojs/taro'
- import OrderListPage from '@/pages/order-list/index'
- import OrderCard from '@/components/order/OrderCard'
- import OrderButtonBar from '@/components/order/OrderButtonBar'
- // Mock Taro
- vi.mock('@tarojs/taro', () => ({
- default: {
- navigateTo: vi.fn(),
- navigateBack: vi.fn(),
- getCurrentInstance: vi.fn(() => ({ router: { params: {} } })),
- stopPullDownRefresh: vi.fn(),
- showModal: vi.fn(),
- showToast: vi.fn()
- }
- }))
- // Mock React Query
- vi.mock('@tanstack/react-query', () => ({
- useInfiniteQuery: vi.fn(() => ({
- data: {
- pages: [
- {
- data: [
- {
- id: 1,
- orderNo: 'ORDER001',
- payState: 0,
- state: 0,
- payAmount: 99.99,
- goodsDetail: JSON.stringify([
- {
- name: '测试商品1',
- price: 49.99,
- num: 2,
- image: 'test-image.jpg'
- }
- ])
- }
- ],
- pagination: {
- current: 1,
- pageSize: 10,
- total: 1
- }
- }
- ]
- },
- isLoading: false,
- isFetchingNextPage: false,
- fetchNextPage: vi.fn(),
- hasNextPage: false,
- refetch: vi.fn()
- }))
- }))
- // Mock Auth Hook
- vi.mock('@/utils/auth', () => ({
- useAuth: vi.fn(() => ({
- user: { id: 1, name: '测试用户' }
- }))
- }))
- describe('OrderListPage', () => {
- beforeEach(() => {
- vi.clearAllMocks()
- })
- it('应该正确渲染订单列表页面', () => {
- render(<OrderListPage />)
- // 验证页面标题
- expect(screen.getByText('我的订单')).toBeDefined()
- // 验证标签栏
- expect(screen.getByText('全部')).toBeDefined()
- expect(screen.getByText('待付款')).toBeDefined()
- expect(screen.getByText('待发货')).toBeDefined()
- expect(screen.getByText('待收货')).toBeDefined()
- expect(screen.getByText('已完成')).toBeDefined()
- })
- it('应该显示订单卡片', () => {
- render(<OrderListPage />)
- // 验证订单信息显示
- expect(screen.getByText('订单号: ORDER001')).toBeDefined()
- expect(screen.getByText('测试商品1')).toBeDefined()
- expect(screen.getByText('¥49.99 × 2')).toBeDefined()
- expect(screen.getByText('实付款: ¥99.99')).toBeDefined()
- })
- it('应该处理标签切换', () => {
- render(<OrderListPage />)
- const tab = screen.getByText('待付款')
- fireEvent.click(tab)
- // 验证标签切换逻辑
- expect(tab).toBeDefined()
- })
- })
- describe('OrderCard', () => {
- const mockOrder = {
- id: 1,
- orderNo: 'ORDER001',
- payState: 0,
- state: 0,
- payAmount: 99.99,
- goodsDetail: JSON.stringify([
- {
- name: '测试商品1',
- price: 49.99,
- num: 2,
- image: 'test-image.jpg'
- }
- ])
- }
- const mockStatusMap = {
- 0: { text: '待发货', color: 'text-orange-500', bgColor: 'bg-orange-100' }
- }
- const mockPayStatusMap = {
- 0: { text: '未支付', color: 'text-red-500', bgColor: 'bg-red-100' }
- }
- const mockOnViewDetail = vi.fn()
- it('应该正确渲染订单卡片', () => {
- render(
- <OrderCard
- order={mockOrder}
- orderStatusMap={mockStatusMap}
- payStatusMap={mockPayStatusMap}
- onViewDetail={mockOnViewDetail}
- />
- )
- // 验证订单基本信息
- expect(screen.getByText('订单号: ORDER001')).toBeDefined()
- expect(screen.getByText('未支付')).toBeDefined()
- expect(screen.getByText('测试商品1')).toBeDefined()
- expect(screen.getByText('¥49.99 × 2')).toBeDefined()
- expect(screen.getByText('实付款: ¥99.99')).toBeDefined()
- expect(screen.getByText('待发货')).toBeDefined()
- })
- it('应该处理商品详情解析错误', () => {
- const invalidOrder = {
- ...mockOrder,
- goodsDetail: 'invalid-json'
- }
- render(
- <OrderCard
- order={invalidOrder}
- orderStatusMap={mockStatusMap}
- payStatusMap={mockPayStatusMap}
- onViewDetail={mockOnViewDetail}
- />
- )
- // 验证在JSON解析错误时不会崩溃
- expect(screen.getByText('订单号: ORDER001')).toBeDefined()
- })
- })
- describe('OrderButtonBar', () => {
- const mockOrder = {
- id: 1,
- orderNo: 'ORDER001',
- payState: 0,
- state: 0,
- payAmount: 99.99
- }
- const mockOnViewDetail = vi.fn()
- it('应该为未支付订单显示正确的操作按钮', () => {
- render(
- <OrderButtonBar
- order={mockOrder}
- onViewDetail={mockOnViewDetail}
- />
- )
- // 验证操作按钮
- expect(screen.getByText('查看详情')).toBeDefined()
- expect(screen.getByText('去支付')).toBeDefined()
- expect(screen.getByText('取消订单')).toBeDefined()
- })
- it('应该为已发货订单显示正确的操作按钮', () => {
- const shippedOrder = {
- ...mockOrder,
- payState: 2,
- state: 1
- }
- render(
- <OrderButtonBar
- order={shippedOrder}
- onViewDetail={mockOnViewDetail}
- />
- )
- expect(screen.getByText('查看详情')).toBeDefined()
- expect(screen.getByText('确认收货')).toBeDefined()
- expect(screen.getByText('查看物流')).toBeDefined()
- })
- it('应该处理按钮点击事件', () => {
- render(
- <OrderButtonBar
- order={mockOrder}
- onViewDetail={mockOnViewDetail}
- />
- )
- const viewDetailButton = screen.getByText('查看详情')
- fireEvent.click(viewDetailButton)
- expect(mockOnViewDetail).toHaveBeenCalledWith(mockOrder)
- })
- })
|