Files
huike-e2e-moicen/tests/smoke-http.spec.ts
T
weli 8e3f61afeb test: add HTTP smoke tests for public-packages API (anti-regression for nginx proxy)
The admin.moicen.com nginx must proxy /api/v1/clazz/ to htykc:3002.
Without it, the API returns SPA index.html instead of JSON, causing
"接口返回了页面而非 JSON" errors in the frontend.

Tests verify:
- public-packages API returns Content-Type: application/json
- Response body has valid structure with package fields

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-01 09:30:36 +08:00

62 lines
2.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { expect, test } from './fixtures';
function frontBaseUrl(): string {
const raw =
process.env.HUIKE_FRONT_BASE_URL?.trim() ||
'https://music-room.moicen.com';
return raw.replace(/\/$/, '');
}
/**
* 不依赖浏览器:验证网关返回 H5 入口文档(部署/ DNS / TLS / Nginx 全链路底线)。
*/
const testOrgId = '57753e11dff343b1ab95623933e8960b';
test.describe('网关与 H5 文档(request', () => {
test('GET / 返回 HTML', async ({ request }) => {
const res = await request.get(`${frontBaseUrl()}/`);
expect(res.ok(), `HTTP ${res.status()} ${res.statusText()}`).toBeTruthy();
const ct = res.headers()['content-type'] ?? '';
expect(ct).toMatch(/text\/html/i);
});
});
test.describe('课包商店 API(反代验收)', () => {
const kcBase =
process.env.KC_BASE_URL?.trim() || 'https://admin.moicen.com';
test('public-packages API 返回 JSON(非 HTML', async ({ request }) => {
const url = `${kcBase}/api/v1/clazz/course-package/public-packages?org_id=${testOrgId}&page=1&page_size=20`;
const res = await request.get(url);
expect(res.ok(), `HTTP ${res.status()} ${res.statusText()}`).toBeTruthy();
const ct = res.headers()['content-type'] ?? '';
expect(ct).toMatch(/application\/json/i);
const body = await res.json();
expect(body).toHaveProperty('r');
expect(body.r).toBe(true);
expect(body).toHaveProperty('d');
expect(Array.isArray(body.d?.[0])).toBe(true);
});
test('public-packages API 含课包卡片字段', async ({ request }) => {
const url = `${kcBase}/api/v1/clazz/course-package/public-packages?org_id=${testOrgId}&page=1&page_size=20`;
const res = await request.get(url);
expect(res.ok()).toBeTruthy();
const body = await res.json();
const packages = body.d?.[0] as Array<Record<string, unknown>>;
expect(packages.length).toBeGreaterThan(0);
for (const pkg of packages) {
expect(pkg).toHaveProperty('package_name');
expect(pkg).toHaveProperty('total_lessons');
expect(pkg).toHaveProperty('package_status');
// Pricing fields should exist in data but not displayed in frontend
expect(pkg).toHaveProperty('original_price');
expect(pkg).toHaveProperty('selling_price');
}
});
});