test(e2e,unit): add navigation edge cases and component coverage

- Add missing-paths E2E spec for desktop/mobile navigation and contrast
- Add local Playwright config for dev server testing
- Expand unit tests for CMS data server, products, contact and UI components
- Adjust jest config for new test patterns
This commit is contained in:
张翔
2026-07-08 14:47:07 +08:00
parent 7f36211342
commit a6ea2cc72c
11 changed files with 1693 additions and 34 deletions
+5 -8
View File
@@ -258,6 +258,7 @@ const mockProduct = {
specs: ['支持 10 万并发', '99.9% 可用性'],
tags: ['ERP', '企业管理'],
heroThemeId: 'erp',
bundle: 'enterprise' as const,
caseStudies: [
{ client: '某制造企业', industry: '制造业', challenge: '库存管理混乱', solution: '实施ERP系统', result: '库存周转率提升200%' },
],
@@ -403,8 +404,7 @@ describe('ProductValueSection', () => {
it('should render product title and overview', async () => {
const { ProductValueSection } = await import('./detail-product-value');
render(<ProductValueSection product={mockProduct} />);
expect(screen.getByText('核心能力')).toBeInTheDocument();
expect(screen.getByText(mockProduct.title)).toBeInTheDocument();
expect(screen.getByRole('heading', { name: /为企业打造的/ })).toHaveTextContent(mockProduct.title);
expect(screen.getByText(mockProduct.overview)).toBeInTheDocument();
});
@@ -434,7 +434,6 @@ describe('ProductValueSection', () => {
it('should render data proofs when available', async () => {
const { ProductValueSection } = await import('./detail-product-value');
render(<ProductValueSection product={mockProduct} />);
expect(screen.getByText('数据说话')).toBeInTheDocument();
expect(screen.getByText('用真实效果证明价值')).toBeInTheDocument();
});
@@ -442,7 +441,7 @@ describe('ProductValueSection', () => {
const { ProductValueSection } = await import('./detail-product-value');
const productWithoutData = { ...mockProduct, dataProofs: [] };
render(<ProductValueSection product={productWithoutData} />);
expect(screen.queryByText('数据说话')).not.toBeInTheDocument();
expect(screen.queryByText('用真实效果证明价值')).not.toBeInTheDocument();
});
it('should render ink glow cards for features', async () => {
@@ -468,7 +467,6 @@ describe('DetailTrustSection', () => {
dataProofs={mockProduct.dataProofs}
/>
);
expect(screen.getByText('数据说话')).toBeInTheDocument();
expect(screen.getByText('用真实效果证明价值')).toBeInTheDocument();
expect(screen.getByText(mockProduct.dataProofs[0]!.metric)).toBeInTheDocument();
});
@@ -480,7 +478,6 @@ describe('DetailTrustSection', () => {
caseStudies={mockProduct.caseStudies}
/>
);
expect(screen.getByText('客户案例')).toBeInTheDocument();
expect(screen.getByText('他们已经实现了转型突破')).toBeInTheDocument();
expect(screen.getByTestId('case-study-card')).toBeInTheDocument();
expect(screen.getByTestId('case-client')).toHaveTextContent('某制造企业');
@@ -508,8 +505,8 @@ describe('DetailTrustSection', () => {
accentColor="#C41E3A"
/>
);
expect(screen.getByText('数据说话')).toBeInTheDocument();
expect(screen.getByText('客户案例')).toBeInTheDocument();
expect(screen.getByText('用真实效果证明价值')).toBeInTheDocument();
expect(screen.getByText('他们已经实现了转型突破')).toBeInTheDocument();
expect(screen.getByText('资质认证')).toBeInTheDocument();
});
});