Skip to main content
Glama

tv-recommender-mcp-server

recommendations.test.ts3.82 kB
import { getRecommendationsByGenre } from '../../tools/recommendations'; import { tmdbClient } from '../../services/tmdbClient'; import * as genreMap from '../../utils/genreMap'; // 模拟依赖 jest.mock('../../services/tmdbClient'); jest.mock('../../utils/genreMap'); describe('getRecommendationsByGenre Tool', () => { // 初始化间谍/模拟对象 const mockedTmdbClient = tmdbClient as jest.Mocked<typeof tmdbClient>; const mockedMapGenreToId = jest.spyOn(genreMap, 'mapGenreToId'); const mockedGetGenreNameById = jest.spyOn(genreMap, 'getGenreNameById'); beforeEach(() => { jest.clearAllMocks(); }); it('应该成功获取推荐并返回格式化字符串', async () => { // 模拟类型映射 mockedMapGenreToId.mockReturnValue(35); // 假设35是喜剧类型 mockedGetGenreNameById.mockReturnValue('喜剧'); // 模拟API响应 mockedTmdbClient.getRecommendationsByGenre.mockResolvedValue({ page: 1, results: [ { id: 1, name: '老友记', overview: '六个朋友在纽约的生活故事', first_air_date: '1994-09-22', vote_average: 8.5 }, { id: 2, name: '生活大爆炸', overview: '四个天才科学家和他们的邻居', first_air_date: '2007-09-24', vote_average: 8.2 } ] }); // 调用工具函数 const result = await getRecommendationsByGenre({ genre: '喜剧' }); // 验证输出 expect(result).toContain('根据您选择的喜剧,为您推荐以下剧集:'); expect(result).toContain('1. 老友记 (1994): 8.5 - 六个朋友在纽约的生活故事'); expect(result).toContain('2. 生活大爆炸 (2007): 8.2 - 四个天才科学家和他们的邻居'); // 验证调用 expect(mockedMapGenreToId).toHaveBeenCalledWith('喜剧'); expect(mockedTmdbClient.getRecommendationsByGenre).toHaveBeenCalledWith(35); }); it('当找不到类型时应该返回错误提示', async () => { // 模拟类型映射失败 mockedMapGenreToId.mockReturnValue(undefined); // 调用工具函数 const result = await getRecommendationsByGenre({ genre: '未知类型' }); // 验证输出 expect(result).toContain('抱歉,无法识别您提供的类型"未知类型"'); // 验证未调用API expect(mockedTmdbClient.getRecommendationsByGenre).not.toHaveBeenCalled(); }); it('当API返回空结果时应该返回相应提示', async () => { // 模拟类型映射 mockedMapGenreToId.mockReturnValue(999); // 假设999是一个罕见类型 mockedGetGenreNameById.mockReturnValue('罕见类型'); // 模拟API响应为空结果 mockedTmdbClient.getRecommendationsByGenre.mockResolvedValue({ page: 1, results: [] }); // 调用工具函数 const result = await getRecommendationsByGenre({ genre: '罕见类型' }); // 验证输出 expect(result).toContain('抱歉,在"罕见类型"类型下没有找到推荐剧集'); }); it('当缺少参数时应该抛出错误', async () => { // 调用工具函数,传入空参数 const result = await getRecommendationsByGenre({ genre: '' }); // 验证输出 expect(result).toContain('获取推荐时发生错误'); }); it('当API调用失败时应该返回错误信息', async () => { // 模拟类型映射 mockedMapGenreToId.mockReturnValue(35); // 模拟API调用失败 mockedTmdbClient.getRecommendationsByGenre.mockRejectedValue(new Error('API错误')); // 调用工具函数 const result = await getRecommendationsByGenre({ genre: '喜剧' }); // 验证输出 expect(result).toContain('获取推荐时发生错误'); }); });

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/terryso/tv-recommender-mcp-server'

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