tv-recommender-mcp-server
Version:
MCP server for TV show recommendations
95 lines (94 loc) • 3.85 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const axios_1 = __importDefault(require("axios"));
const config = __importStar(require("../utils/config"));
const tmdbClient_1 = __importDefault(require("../services/tmdbClient"));
// 模拟axios和config模块
jest.mock('axios');
jest.mock('../utils/config', () => ({
validateApiKey: jest.fn().mockReturnValue('test-api-key')
}));
describe('TMDbClient Lazy Loading Test', () => {
let client;
let mockAxiosGet;
let axiosCreateSpy;
beforeEach(() => {
// 清除所有模拟
jest.clearAllMocks();
// 创建模拟的axios get方法
mockAxiosGet = jest.fn();
// 监视axios.create并返回带有get方法的模拟
axiosCreateSpy = jest.spyOn(axios_1.default, 'create').mockReturnValue({
get: mockAxiosGet
});
// 创建客户端实例
client = new tmdbClient_1.default();
});
it('初始化时不应该调用validateApiKey或创建axios实例', () => {
// 验证构造函数时不调用validateApiKey和axios.create
expect(config.validateApiKey).not.toHaveBeenCalled();
expect(axiosCreateSpy).not.toHaveBeenCalled();
});
it('调用方法时应该懒加载客户端', async () => {
// 模拟成功响应
mockAxiosGet.mockResolvedValueOnce({ status: 200 });
// 调用方法,触发懒加载
await client.testConnection();
// 验证validateApiKey和axios.create被调用
expect(config.validateApiKey).toHaveBeenCalledTimes(1);
expect(axiosCreateSpy).toHaveBeenCalledTimes(1);
expect(axiosCreateSpy).toHaveBeenCalledWith({
baseURL: 'https://api.themoviedb.org/3',
params: {
api_key: 'test-api-key',
language: 'zh-CN'
}
});
});
it('多次调用方法应该只初始化一次客户端', async () => {
// 模拟成功响应
mockAxiosGet.mockResolvedValue({ status: 200 });
// 调用方法两次
await client.testConnection();
await client.testConnection();
// 验证validateApiKey和axios.create只被调用一次
expect(config.validateApiKey).toHaveBeenCalledTimes(1);
expect(axiosCreateSpy).toHaveBeenCalledTimes(1);
});
});