Skip to main content
Glama

Microservice Control Panel (MCP)

by battyht
oceanengine.projects.test.js4.16 kB
const request = require('supertest'); const express = require('express'); const app = require('../../index'); const oceanengineService = require('../../app/services/oceanengine.service'); // 模拟oceanengineService.getProjectList方法 jest.mock('../../app/services/oceanengine.service'); describe('项目列表 API 测试', () => { const mockToken = 'd4b5172a79f174b8cecb4a214ea73f35c8039a68'; const mockAccountId = '1819960516826122'; beforeEach(() => { jest.clearAllMocks(); }); test('成功获取项目列表', async () => { // 模拟服务返回数据 const mockResponse = { code: 0, message: 'OK', request_id: '202504021830449F6248928F03F713DC3E', data: { list: [ { project_id: '7488331055091171379', project_name: '0402_自投268', budget: 268.00, budget_mode: 'BUDGET_MODE_DAY', status: 'PROJECT_STATUS_ENABLE', opt_status: 'ENABLE', stat_cost: 115.37, roi: '0.0000' } ], page_info: { page: 1, page_size: 10, total_number: 1, total_page: 1 } } }; // 设置模拟返回 oceanengineService.getProjectList.mockResolvedValue(mockResponse); // 发送请求 const response = await request(app) .get(`/api/oceanengine/ad-accounts/${mockAccountId}/projects`) .set('Access-Token', mockToken) .expect('Content-Type', /json/) .expect(200); // 验证结果 expect(response.body).toEqual(mockResponse); expect(oceanengineService.getProjectList).toHaveBeenCalledWith( mockAccountId, expect.any(Object), mockToken ); }); test('没有Access-Token时返回401', async () => { const response = await request(app) .get(`/api/oceanengine/ad-accounts/${mockAccountId}/projects`) .expect('Content-Type', /json/) .expect(401); expect(response.body).toHaveProperty('status', 'error'); expect(response.body).toHaveProperty('message', '缺少必要的Access-Token请求头'); expect(oceanengineService.getProjectList).not.toHaveBeenCalled(); }); test('服务抛出错误时返回500', async () => { // 模拟服务抛出错误 const errorMessage = '获取项目列表失败: API请求错误'; oceanengineService.getProjectList.mockRejectedValue(new Error(errorMessage)); const response = await request(app) .get(`/api/oceanengine/ad-accounts/${mockAccountId}/projects`) .set('Access-Token', mockToken) .expect('Content-Type', /json/) .expect(500); expect(response.body).toHaveProperty('status', 'error'); expect(response.body).toHaveProperty('message', errorMessage); }); test('过滤条件参数处理', async () => { // 模拟成功响应 oceanengineService.getProjectList.mockResolvedValue({ code: 0, message: 'OK', data: { list: [] } }); // 发送带过滤参数的请求 const filtering = { status: 'PROJECT_STATUS_ENABLE' }; await request(app) .get(`/api/oceanengine/ad-accounts/${mockAccountId}/projects`) .query({ filtering: JSON.stringify(filtering) }) .set('Access-Token', mockToken) .expect(200); // 验证过滤参数被正确解析 expect(oceanengineService.getProjectList).toHaveBeenCalledWith( mockAccountId, expect.objectContaining({ filtering }), mockToken ); }); test('过滤条件格式错误时返回400', async () => { const invalidFiltering = '{status:"PROJECT_STATUS_ENABLE"}'; // 无效的JSON const response = await request(app) .get(`/api/oceanengine/ad-accounts/${mockAccountId}/projects`) .query({ filtering: invalidFiltering }) .set('Access-Token', mockToken) .expect(400); expect(response.body).toHaveProperty('status', 'error'); expect(response.body).toHaveProperty('message', 'filtering参数格式错误,应为JSON对象'); expect(oceanengineService.getProjectList).not.toHaveBeenCalled(); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/battyht/AD_MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server