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