فهرست منبع

✅ test(goods-detail): 改进商品详情页集成测试的规格选择流程

- 使用更精确的选择器定位页面上的规格选择按钮(.spec-select-btn)
- 在验证规格弹窗时,等待规格选项(如“红色款”)加载完成后再进行断言
- 在规格选择流程中,添加点击“确定”按钮并等待弹窗关闭的步骤
- 更新规格选项的选择方式,从使用测试ID(spec-option-red)改为使用文本内容(“红色款”)
- 在验证规格信息时,确保断言的是页面上的元素而非弹窗中的元素
- 为所有涉及规格选择的测试用例(查看规格、选择规格、加入购物车、立即购买、库存验证)统一添加完整的弹窗交互流程
yourname 1 ماه پیش
والد
کامیت
d8229ea1ea
1فایلهای تغییر یافته به همراه77 افزوده شده و 15 حذف شده
  1. 77 15
      mini/tests/unit/pages/goods-detail/goods-detail.test.tsx

+ 77 - 15
mini/tests/unit/pages/goods-detail/goods-detail.test.tsx

@@ -202,16 +202,17 @@ describe('GoodsDetailPage集成测试', () => {
       expect(screen.getByText('测试商品', { selector: '.goods-title' })).toBeInTheDocument()
     })
 
-    // 点击规格选择按钮
-    const specButton = screen.getByText('选择规格')
+    // 点击规格选择按钮 - 使用选择器定位页面上的按钮,不是弹窗标题
+    const specButton = screen.getByText('选择规格', { selector: '.spec-select-btn' })
     fireEvent.click(specButton)
 
-    // 验证规格选择弹窗显示 - 使用真实组件的类名和文本
-    // 等待组件加载完成(API mock立即返回数据)
+    // 验证规格选择弹窗显示并加载规格选项
     await waitFor(() => {
-      expect(screen.getByText('选择规格')).toBeInTheDocument()
+      // 等待规格选项加载完成
+      expect(screen.getByText('红色款')).toBeInTheDocument()
     })
-    expect(screen.getByText('红色款')).toBeInTheDocument()
+    // 同时也验证弹窗标题和另一个规格选项
+    expect(screen.getByText('选择规格', { selector: '.spec-modal-title' })).toBeInTheDocument()
     expect(screen.getByText('蓝色款')).toBeInTheDocument()
   })
 
@@ -237,15 +238,28 @@ describe('GoodsDetailPage集成测试', () => {
     })
 
     // 打开规格选择弹窗
-    const specButton = screen.getByText('选择规格')
+    const specButton = screen.getByText('选择规格', { selector: '.spec-select-btn' })
     fireEvent.click(specButton)
 
+    // 等待规格弹窗加载
+    await waitFor(() => {
+      expect(screen.getByText('红色款')).toBeInTheDocument()
+    })
+
     // 选择规格
-    const redSpec = screen.getByTestId('spec-option-red')
+    const redSpec = screen.getByText('红色款')
     fireEvent.click(redSpec)
 
-    // 验证规格信息显示
-    expect(screen.getByText('红色款')).toBeInTheDocument()
+    // 点击确认按钮
+    const confirmButton = screen.getByText(/确定/)
+    fireEvent.click(confirmButton)
+
+    // 等待规格弹窗关闭,页面更新
+    await waitFor(() => {
+      // 验证规格信息显示在页面上(不是在弹窗中)
+      expect(screen.getByText('红色款')).toBeInTheDocument()
+    })
+
     expect(screen.getByText('¥299.00', { selector: '.spec-price' })).toBeInTheDocument()
     expect(screen.getByText('库存: 50', { selector: '.spec-stock' })).toBeInTheDocument()
   })
@@ -272,11 +286,27 @@ describe('GoodsDetailPage集成测试', () => {
     })
 
     // 打开规格选择弹窗并选择规格
-    const specButton = screen.getByText('选择规格')
+    const specButton = screen.getByText('选择规格', { selector: '.spec-select-btn' })
     fireEvent.click(specButton)
-    const redSpec = screen.getByTestId('spec-option-red')
+
+    // 等待规格弹窗加载
+    await waitFor(() => {
+      expect(screen.getByText('红色款')).toBeInTheDocument()
+    })
+
+    // 选择规格
+    const redSpec = screen.getByText('红色款')
     fireEvent.click(redSpec)
 
+    // 点击确认按钮
+    const confirmButton = screen.getByText(/确定/)
+    fireEvent.click(confirmButton)
+
+    // 等待规格弹窗关闭,页面更新
+    await waitFor(() => {
+      expect(screen.getByText('红色款')).toBeInTheDocument()
+    })
+
     // 点击加入购物车
     const addToCartButton = screen.getByText('加入购物车')
     fireEvent.click(addToCartButton)
@@ -315,11 +345,27 @@ describe('GoodsDetailPage集成测试', () => {
     })
 
     // 打开规格选择弹窗并选择规格
-    const specButton = screen.getByText('选择规格')
+    const specButton = screen.getByText('选择规格', { selector: '.spec-select-btn' })
     fireEvent.click(specButton)
-    const redSpec = screen.getByTestId('spec-option-red')
+
+    // 等待规格弹窗加载
+    await waitFor(() => {
+      expect(screen.getByText('红色款')).toBeInTheDocument()
+    })
+
+    // 选择规格
+    const redSpec = screen.getByText('红色款')
     fireEvent.click(redSpec)
 
+    // 点击确认按钮
+    const confirmButton = screen.getByText(/确定/)
+    fireEvent.click(confirmButton)
+
+    // 等待规格弹窗关闭,页面更新
+    await waitFor(() => {
+      expect(screen.getByText('红色款')).toBeInTheDocument()
+    })
+
     // 点击立即购买
     const buyNowButton = screen.getByText('立即购买')
     fireEvent.click(buyNowButton)
@@ -402,9 +448,25 @@ describe('GoodsDetailPage集成测试', () => {
     // 打开规格选择弹窗并选择库存较少的规格
     const specButton = screen.getByText('选择规格')
     fireEvent.click(specButton)
-    const blueSpec = screen.getByTestId('spec-option-blue') // 库存30
+
+    // 等待规格弹窗加载
+    await waitFor(() => {
+      expect(screen.getByText('蓝色款')).toBeInTheDocument()
+    })
+
+    // 选择规格
+    const blueSpec = screen.getByText('蓝色款') // 库存30
     fireEvent.click(blueSpec)
 
+    // 点击确认按钮
+    const confirmButton = screen.getByText(/确定/)
+    fireEvent.click(confirmButton)
+
+    // 等待规格弹窗关闭,页面更新
+    await waitFor(() => {
+      expect(screen.getByText('蓝色款')).toBeInTheDocument()
+    })
+
     // 获取数量输入框
     const quantityInput = screen.getByDisplayValue('1')