Skip to main content
Glama

mcp-pinterest

/** * 测试辅助工具 * 提供测试中常用的模拟和工具函数 */ import { jest, describe, expect, test } from '@jest/globals'; /** * Pinterest搜索结果类型 */ export interface PinterestResult { title: string; image_url: string; link: string; source: string; } /** * 创建模拟的 Pinterest 搜索结果 * @param count 结果数量 * @returns 模拟的搜索结果数组 */ export function createMockPinterestResults(count: number = 5): PinterestResult[] { const results: PinterestResult[] = []; for (let i = 1; i <= count; i++) { results.push({ title: `Test Image ${i}`, image_url: `https://i.pinimg.com/originals/test${i}.jpg`, link: `https://pinterest.com/pin/${i}`, source: 'pinterest' }); } return results; } /** * 模拟 Axios 响应 * @param content 响应内容 * @param contentType 内容类型 * @returns 模拟的 Axios 响应对象 */ export function mockAxiosResponse(content: any = 'mock-data', contentType: string = 'image/jpeg'): any { return { data: typeof content === 'string' ? Buffer.from(content) : content, headers: { 'content-type': contentType } }; } /** * 创建模拟的文件系统 * @returns 模拟的 fs 对象 */ export function createMockFileSystem(): any { return { promises: { mkdir: jest.fn().mockResolvedValue(undefined), writeFile: jest.fn().mockResolvedValue(undefined), access: jest.fn().mockImplementation((path: string) => { if (path.includes('exists')) { return Promise.resolve(); } else { return Promise.reject(new Error('File not exists')); } }) }, existsSync: jest.fn().mockReturnValue(true), mkdirSync: jest.fn() }; } /** * 创建模拟的 Puppeteer 浏览器 * @param evaluateResults 浏览器评估返回的结果 * @returns 模拟的 puppeteer 对象 */ export function createMockPuppeteer(evaluateResults: PinterestResult[] = []): any { const mockPage = { setViewport: jest.fn().mockResolvedValue(undefined), setUserAgent: jest.fn().mockResolvedValue(undefined), setDefaultNavigationTimeout: jest.fn(), setDefaultTimeout: jest.fn(), setRequestInterception: jest.fn().mockResolvedValue(undefined), on: jest.fn(), goto: jest.fn().mockResolvedValue(undefined), waitForSelector: jest.fn().mockResolvedValue(undefined), evaluate: jest.fn().mockResolvedValue(evaluateResults.length ? evaluateResults : createMockPinterestResults()), close: jest.fn().mockResolvedValue(undefined) }; const mockBrowser = { newPage: jest.fn().mockResolvedValue(mockPage), close: jest.fn().mockResolvedValue(undefined) }; return { launch: jest.fn().mockResolvedValue(mockBrowser), mockPage, mockBrowser }; } /** * 等待一段时间 * @param ms 等待的毫秒数 * @returns Promise */ export function delay(ms: number): Promise<void> { return new Promise(resolve => setTimeout(resolve, ms)); } /** * 断言函数被调用的次数 * @param mockFn 模拟函数 * @param count 预期的调用次数 */ export function assertCallCount(mockFn: jest.Mock, count: number): void { expect(mockFn.mock.calls.length).toBe(count); } /** * 清除所有模拟 */ export function resetAllMocks(): void { jest.clearAllMocks(); jest.resetAllMocks(); } // Test suite for the helpers describe('测试辅助工具', () => { test('createMockPinterestResults 应该创建正确数量的结果', () => { const results = createMockPinterestResults(3); expect(results).toHaveLength(3); expect(results[0].title).toBe('Test Image 1'); expect(results[0].image_url).toBe('https://i.pinimg.com/originals/test1.jpg'); }); });

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/mcp-pinterest'

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