chore: test --vision (#54)

This commit is contained in:
Simon Knott 2025-03-27 17:13:06 +01:00 committed by GitHub
parent d4bc2c78d2
commit fb24561c67
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 62 additions and 4 deletions

View File

@ -16,7 +16,7 @@
import { test, expect } from './fixtures'; import { test, expect } from './fixtures';
test('test tool list', async ({ server }) => { test('test tool list', async ({ server, visionServer }) => {
const list = await server.send({ const list = await server.send({
jsonrpc: '2.0', jsonrpc: '2.0',
id: 1, id: 1,
@ -69,6 +69,56 @@ test('test tool list', async ({ server }) => {
], ],
}), }),
})); }));
const visionList = await visionServer.send({
jsonrpc: '2.0',
id: 1,
method: 'tools/list',
});
expect(visionList).toEqual(expect.objectContaining({
id: 1,
result: expect.objectContaining({
tools: expect.arrayContaining([
expect.objectContaining({
name: 'browser_navigate',
}),
expect.objectContaining({
name: 'browser_go_back',
}),
expect.objectContaining({
name: 'browser_go_forward',
}),
expect.objectContaining({
name: 'browser_screenshot',
}),
expect.objectContaining({
name: 'browser_move_mouse',
}),
expect.objectContaining({
name: 'browser_click',
}),
expect.objectContaining({
name: 'browser_drag',
}),
expect.objectContaining({
name: 'browser_type',
}),
expect.objectContaining({
name: 'browser_press_key',
}),
expect.objectContaining({
name: 'browser_wait',
}),
expect.objectContaining({
name: 'browser_save_as_pdf',
}),
expect.objectContaining({
name: 'browser_close',
}),
]),
}),
}));
}); });
test('test resources list', async ({ server }) => { test('test resources list', async ({ server }) => {

View File

@ -69,7 +69,7 @@ class MCPServer extends EventEmitter {
}); });
} }
async send(message: any, options?: { timeout?: number }): Promise<void> { async send(message: any, options?: { timeout?: number }): Promise<any> {
await this.sendNoReply(message); await this.sendNoReply(message);
return this._waitForResponse(options || {}); return this._waitForResponse(options || {});
} }
@ -112,7 +112,8 @@ class MCPServer extends EventEmitter {
type Fixtures = { type Fixtures = {
server: MCPServer; server: MCPServer;
startServer: (options?: { env?: NodeJS.ProcessEnv }) => Promise<MCPServer>; visionServer: MCPServer;
startServer: (options?: { env?: NodeJS.ProcessEnv, vision?: boolean }) => Promise<MCPServer>;
wsEndpoint: string; wsEndpoint: string;
}; };
@ -121,12 +122,19 @@ export const test = baseTest.extend<Fixtures>({
await use(await startServer()); await use(await startServer());
}, },
visionServer: async ({ startServer }, use) => {
await use(await startServer({ vision: true }));
},
startServer: async ({ }, use, testInfo) => { startServer: async ({ }, use, testInfo) => {
let server: MCPServer | undefined; let server: MCPServer | undefined;
const userDataDir = testInfo.outputPath('user-data-dir'); const userDataDir = testInfo.outputPath('user-data-dir');
use(async options => { use(async options => {
server = new MCPServer('node', [path.join(__dirname, '../cli.js'), '--headless', '--user-data-dir', userDataDir], options); const args = ['--headless', '--user-data-dir', userDataDir];
if (options?.vision)
args.push('--vision');
server = new MCPServer('node', [path.join(__dirname, '../cli.js'), ...args], options);
const initialize = await server.send({ const initialize = await server.send({
jsonrpc: '2.0', jsonrpc: '2.0',
id: 0, id: 0,