|
|
@@ -129,13 +129,18 @@ describe('支付页面额度支付功能测试', () => {
|
|
|
expect(screen.getByTestId('order-no')).toHaveTextContent('ORD123456')
|
|
|
expect(screen.getByTestId('payment-amount')).toHaveTextContent('¥100.00')
|
|
|
|
|
|
+ // 等待额度加载完成
|
|
|
+ await waitFor(() => {
|
|
|
+ expect(screen.getByTestId('available-amount-text')).toHaveTextContent('使用信用额度支付')
|
|
|
+ })
|
|
|
+
|
|
|
// 验证支付方式选项
|
|
|
expect(screen.getByTestId('wechat-payment-option')).toBeInTheDocument()
|
|
|
expect(screen.getByTestId('credit-payment-option')).toBeInTheDocument()
|
|
|
})
|
|
|
|
|
|
- test('应该显示额度支付选项和可用额度', async () => {
|
|
|
- // Mock 额度查询返回正常数据
|
|
|
+ test('应该显示额度支付选项(只在额度满足时)', async () => {
|
|
|
+ // Mock 额度查询返回正常数据(额度足够)
|
|
|
const mockCreditBalance = createTestCreditBalance({ availableAmount: 800 })
|
|
|
;(creditBalanceClient.me.$get as jest.Mock).mockResolvedValue({
|
|
|
status: 200,
|
|
|
@@ -150,15 +155,16 @@ describe('支付页面额度支付功能测试', () => {
|
|
|
|
|
|
// 等待额度加载完成
|
|
|
await waitFor(() => {
|
|
|
- expect(screen.getByTestId('available-amount-text')).toHaveTextContent('可用额度: ¥800.00')
|
|
|
+ expect(screen.getByTestId('available-amount-text')).toHaveTextContent('使用信用额度支付')
|
|
|
})
|
|
|
|
|
|
- // 验证额度支付选项可用
|
|
|
+ // 验证额度支付选项显示
|
|
|
const creditPaymentOption = screen.getByTestId('credit-payment-option')
|
|
|
+ expect(creditPaymentOption).toBeInTheDocument()
|
|
|
expect(creditPaymentOption).not.toHaveClass('opacity-50')
|
|
|
})
|
|
|
|
|
|
- test('额度为0时应该禁用额度支付选项', async () => {
|
|
|
+ test('额度为0时不应该显示额度支付选项', async () => {
|
|
|
// Mock 额度查询返回额度为0的数据
|
|
|
const mockCreditBalance = createTestCreditBalance({
|
|
|
totalLimit: 0,
|
|
|
@@ -177,17 +183,19 @@ describe('支付页面额度支付功能测试', () => {
|
|
|
</TestWrapper>
|
|
|
)
|
|
|
|
|
|
- // 等待额度加载完成
|
|
|
+ // 等待额度加载完成 - 现在额度未启用时,额度支付选项根本不显示
|
|
|
+ // 所以没有特定的文本需要等待
|
|
|
await waitFor(() => {
|
|
|
- expect(screen.getByTestId('credit-disabled-text')).toHaveTextContent('额度未启用')
|
|
|
+ // 验证只有微信支付选项显示
|
|
|
+ expect(screen.getByTestId('wechat-payment-option')).toBeInTheDocument()
|
|
|
})
|
|
|
|
|
|
- // 验证额度支付选项被禁用
|
|
|
- const creditPaymentOption = screen.getByTestId('credit-payment-option')
|
|
|
- expect(creditPaymentOption).toHaveClass('opacity-50')
|
|
|
+ // 验证额度支付选项不显示
|
|
|
+ expect(screen.queryByTestId('credit-payment-option')).not.toBeInTheDocument()
|
|
|
+ expect(screen.queryByTestId('credit-disabled-text')).not.toBeInTheDocument()
|
|
|
})
|
|
|
|
|
|
- test('额度不足时应该显示不足提示', async () => {
|
|
|
+ test('额度不足时不应该显示额度支付选项', async () => {
|
|
|
// Mock 额度查询返回额度不足的数据
|
|
|
const mockCreditBalance = createTestCreditBalance({
|
|
|
totalLimit: 50,
|
|
|
@@ -208,12 +216,12 @@ describe('支付页面额度支付功能测试', () => {
|
|
|
|
|
|
// 等待额度加载完成
|
|
|
await waitFor(() => {
|
|
|
- expect(screen.getByTestId('available-amount-text')).toHaveTextContent('可用额度: ¥10.00 (不足)')
|
|
|
+ // 额度不足时,额度支付选项不应该显示
|
|
|
+ expect(screen.queryByTestId('credit-payment-option')).not.toBeInTheDocument()
|
|
|
})
|
|
|
|
|
|
- // 验证额度支付选项被禁用
|
|
|
- const creditPaymentOption = screen.getByTestId('credit-payment-option')
|
|
|
- expect(creditPaymentOption).toHaveClass('opacity-50')
|
|
|
+ // 验证只有微信支付选项显示
|
|
|
+ expect(screen.getByTestId('wechat-payment-option')).toBeInTheDocument()
|
|
|
})
|
|
|
|
|
|
test('应该可以切换支付方式', async () => {
|
|
|
@@ -232,7 +240,7 @@ describe('支付页面额度支付功能测试', () => {
|
|
|
|
|
|
// 等待额度加载完成
|
|
|
await waitFor(() => {
|
|
|
- expect(screen.getByTestId('available-amount-text')).toHaveTextContent('可用额度: ¥800.00')
|
|
|
+ expect(screen.getByTestId('available-amount-text')).toHaveTextContent('使用信用额度支付')
|
|
|
})
|
|
|
|
|
|
// 初始应该是微信支付选中
|
|
|
@@ -254,7 +262,7 @@ describe('支付页面额度支付功能测试', () => {
|
|
|
expect(screen.getByTestId('pay-button')).toHaveTextContent('额度支付 ¥100.00')
|
|
|
})
|
|
|
|
|
|
- test('选择额度支付时应该显示额度详情', async () => {
|
|
|
+ test('选择额度支付时应该显示额度详情(不显示可用额度)', async () => {
|
|
|
// Mock 额度查询返回正常数据
|
|
|
const mockCreditBalance = createTestCreditBalance()
|
|
|
;(creditBalanceClient.me.$get as jest.Mock).mockResolvedValue({
|
|
|
@@ -270,24 +278,25 @@ describe('支付页面额度支付功能测试', () => {
|
|
|
|
|
|
// 等待额度加载完成
|
|
|
await waitFor(() => {
|
|
|
- expect(screen.getByText('可用额度: ¥800.00')).toBeInTheDocument()
|
|
|
+ expect(screen.getByTestId('available-amount-text')).toHaveTextContent('使用信用额度支付')
|
|
|
})
|
|
|
|
|
|
// 点击额度支付选项
|
|
|
- const creditOption = screen.getByText('额度支付').closest('[class*="border-gray-200"]')
|
|
|
- fireEvent.click(creditOption!)
|
|
|
+ const creditOption = screen.getByTestId('credit-payment-option')
|
|
|
+ fireEvent.click(creditOption)
|
|
|
|
|
|
- // 验证显示额度详情
|
|
|
+ // 验证显示额度详情(不包含可用额度)
|
|
|
await waitFor(() => {
|
|
|
// 使用data-testid查询额度详情容器
|
|
|
const creditDetails = screen.getByTestId('credit-payment-details')
|
|
|
expect(creditDetails).toBeInTheDocument()
|
|
|
|
|
|
- // 验证容器中包含所有额度信息
|
|
|
+ // 验证容器中包含额度信息(不包含可用额度)
|
|
|
expect(creditDetails).toHaveTextContent(/使用信用额度支付,无需立即付款/)
|
|
|
- expect(creditDetails).toHaveTextContent(/可用额度: ¥800\.00/)
|
|
|
expect(creditDetails).toHaveTextContent(/总额度: ¥1000\.00/)
|
|
|
expect(creditDetails).toHaveTextContent(/已用额度: ¥200\.00/)
|
|
|
+ // 不应该包含可用额度
|
|
|
+ expect(creditDetails).not.toHaveTextContent(/可用额度:/)
|
|
|
})
|
|
|
})
|
|
|
|
|
|
@@ -314,12 +323,12 @@ describe('支付页面额度支付功能测试', () => {
|
|
|
|
|
|
// 等待额度加载完成
|
|
|
await waitFor(() => {
|
|
|
- expect(screen.getByText('可用额度: ¥800.00')).toBeInTheDocument()
|
|
|
+ expect(screen.getByTestId('available-amount-text')).toHaveTextContent('使用信用额度支付')
|
|
|
})
|
|
|
|
|
|
// 点击额度支付选项
|
|
|
- const creditOption = screen.getByText('额度支付').closest('[class*="border-gray-200"]')
|
|
|
- fireEvent.click(creditOption!)
|
|
|
+ const creditOption = screen.getByTestId('credit-payment-option')
|
|
|
+ fireEvent.click(creditOption)
|
|
|
|
|
|
// 点击支付按钮
|
|
|
const payButton = screen.getByText('额度支付 ¥100.00')
|
|
|
@@ -368,12 +377,12 @@ describe('支付页面额度支付功能测试', () => {
|
|
|
|
|
|
// 等待额度加载完成
|
|
|
await waitFor(() => {
|
|
|
- expect(screen.getByText('可用额度: ¥800.00')).toBeInTheDocument()
|
|
|
+ expect(screen.getByTestId('available-amount-text')).toHaveTextContent('使用信用额度支付')
|
|
|
})
|
|
|
|
|
|
// 点击额度支付选项
|
|
|
- const creditOption = screen.getByText('额度支付').closest('[class*="border-gray-200"]')
|
|
|
- fireEvent.click(creditOption!)
|
|
|
+ const creditOption = screen.getByTestId('credit-payment-option')
|
|
|
+ fireEvent.click(creditOption)
|
|
|
|
|
|
// 点击支付按钮
|
|
|
const payButton = screen.getByText('额度支付 ¥100.00')
|
|
|
@@ -408,7 +417,7 @@ describe('支付页面额度支付功能测试', () => {
|
|
|
|
|
|
// 等待额度加载完成
|
|
|
await waitFor(() => {
|
|
|
- expect(screen.getByText('可用额度: ¥800.00')).toBeInTheDocument()
|
|
|
+ expect(screen.getByTestId('available-amount-text')).toHaveTextContent('使用信用额度支付')
|
|
|
})
|
|
|
|
|
|
// 验证两个支付选项都存在
|
|
|
@@ -440,4 +449,80 @@ describe('支付页面额度支付功能测试', () => {
|
|
|
expect(screen.getByTestId('pay-button')).toHaveTextContent('微信支付 ¥100.00')
|
|
|
})
|
|
|
})
|
|
|
+
|
|
|
+ test('页面加载时不应该自动调用微信支付API', async () => {
|
|
|
+ // Mock 额度查询返回正常数据
|
|
|
+ const mockCreditBalance = createTestCreditBalance()
|
|
|
+ ;(creditBalanceClient.me.$get as jest.Mock).mockResolvedValue({
|
|
|
+ status: 200,
|
|
|
+ json: () => Promise.resolve(mockCreditBalance),
|
|
|
+ })
|
|
|
+
|
|
|
+ // 获取paymentClient mock
|
|
|
+ const { paymentClient } = require('@/api')
|
|
|
+
|
|
|
+ render(
|
|
|
+ <TestWrapper>
|
|
|
+ <PaymentPage />
|
|
|
+ </TestWrapper>
|
|
|
+ )
|
|
|
+
|
|
|
+ // 等待额度加载完成
|
|
|
+ await waitFor(() => {
|
|
|
+ expect(screen.getByTestId('available-amount-text')).toHaveTextContent('使用信用额度支付')
|
|
|
+ })
|
|
|
+
|
|
|
+ // 验证微信支付API没有被调用(页面加载时不应该自动调用)
|
|
|
+ expect(paymentClient.payment.$post).not.toHaveBeenCalled()
|
|
|
+
|
|
|
+ // 验证支付按钮可用
|
|
|
+ const payButton = screen.getByTestId('pay-button')
|
|
|
+ expect(payButton).not.toBeDisabled()
|
|
|
+ expect(payButton).toHaveTextContent('微信支付 ¥100.00')
|
|
|
+ })
|
|
|
+
|
|
|
+ test('选择微信支付并点击支付按钮时才调用微信支付API', async () => {
|
|
|
+ // Mock 额度查询返回正常数据
|
|
|
+ const mockCreditBalance = createTestCreditBalance()
|
|
|
+ ;(creditBalanceClient.me.$get as jest.Mock).mockResolvedValue({
|
|
|
+ status: 200,
|
|
|
+ json: () => Promise.resolve(mockCreditBalance),
|
|
|
+ })
|
|
|
+
|
|
|
+ // Mock 微信支付参数
|
|
|
+ const { paymentClient } = require('@/api')
|
|
|
+ ;(paymentClient.payment.$post as jest.Mock).mockResolvedValue({
|
|
|
+ status: 200,
|
|
|
+ json: () => Promise.resolve(createTestPaymentData()),
|
|
|
+ })
|
|
|
+
|
|
|
+ render(
|
|
|
+ <TestWrapper>
|
|
|
+ <PaymentPage />
|
|
|
+ </TestWrapper>
|
|
|
+ )
|
|
|
+
|
|
|
+ // 等待额度加载完成
|
|
|
+ await waitFor(() => {
|
|
|
+ expect(screen.getByTestId('available-amount-text')).toHaveTextContent('使用信用额度支付')
|
|
|
+ })
|
|
|
+
|
|
|
+ // 初始时微信支付API不应该被调用
|
|
|
+ expect(paymentClient.payment.$post).not.toHaveBeenCalled()
|
|
|
+
|
|
|
+ // 点击支付按钮(默认选中微信支付)
|
|
|
+ const payButton = screen.getByTestId('pay-button')
|
|
|
+ fireEvent.click(payButton)
|
|
|
+
|
|
|
+ // 验证微信支付API被调用
|
|
|
+ await waitFor(() => {
|
|
|
+ expect(paymentClient.payment.$post).toHaveBeenCalledWith({
|
|
|
+ json: {
|
|
|
+ orderId: 123,
|
|
|
+ totalAmount: 10000, // 100元转换为分
|
|
|
+ description: '订单支付 - ORD123456',
|
|
|
+ },
|
|
|
+ })
|
|
|
+ })
|
|
|
+ })
|
|
|
})
|