1- import { describe , test , expect } from 'vitest' ;
1+ import { describe , test , expect , vi , afterAll , beforeAll } from 'vitest' ;
22import { NodeMCPServerStdio } from '../../../src/shims/mcp-stdio/node' ;
3+ import { TransportSendOptions } from '@modelcontextprotocol/sdk/shared/transport' ;
4+ import { JSONRPCMessage } from '@modelcontextprotocol/sdk/types' ;
35
46describe ( 'NodeMCPServerStdio' , ( ) => {
7+ beforeAll ( ( ) => {
8+ vi . mock (
9+ '@modelcontextprotocol/sdk/client/stdio.js' ,
10+ async ( importOriginal ) => {
11+ return {
12+ ...( await importOriginal ( ) ) ,
13+ StdioClientTransport : MockStdioClientTransport ,
14+ } ;
15+ } ,
16+ ) ;
17+ vi . mock (
18+ '@modelcontextprotocol/sdk/client/index.js' ,
19+ async ( importOriginal ) => {
20+ return {
21+ ...( await importOriginal ( ) ) ,
22+ Client : MockClient ,
23+ } ;
24+ } ,
25+ ) ;
26+ } ) ;
527 test ( 'should be available' , async ( ) => {
628 const server = new NodeMCPServerStdio ( {
729 name : 'test' ,
@@ -11,6 +33,56 @@ describe('NodeMCPServerStdio', () => {
1133 expect ( server ) . toBeDefined ( ) ;
1234 expect ( server . name ) . toBe ( 'test' ) ;
1335 expect ( server . cacheToolsList ) . toBe ( true ) ;
14- await expect ( server . connect ( ) ) . rejects . toThrow ( ) ;
36+ await server . connect ( ) ;
37+ await server . close ( ) ;
38+ } ) ;
39+
40+ afterAll ( ( ) => {
41+ vi . clearAllMocks ( ) ;
1542 } ) ;
1643} ) ;
44+
45+ class MockStdioClientTransport {
46+ options : {
47+ command : string ;
48+ args : string [ ] ;
49+ env : Record < string , string > ;
50+ cwd : string ;
51+ } ;
52+ constructor ( options : {
53+ command : string ;
54+ args : string [ ] ;
55+ env : Record < string , string > ;
56+ cwd : string ;
57+ } ) {
58+ this . options = options ;
59+ }
60+ start ( ) : Promise < void > {
61+ return Promise . resolve ( ) ;
62+ }
63+ send (
64+ _message : JSONRPCMessage ,
65+ _options ?: TransportSendOptions ,
66+ ) : Promise < void > {
67+ return Promise . resolve ( ) ;
68+ }
69+ close ( ) : Promise < void > {
70+ return Promise . resolve ( ) ;
71+ }
72+ }
73+
74+ class MockClient {
75+ options : {
76+ name : string ;
77+ version : string ;
78+ } ;
79+ constructor ( options : { name : string ; version : string } ) {
80+ this . options = options ;
81+ }
82+ connect ( ) : Promise < void > {
83+ return Promise . resolve ( ) ;
84+ }
85+ close ( ) : Promise < void > {
86+ return Promise . resolve ( ) ;
87+ }
88+ }
0 commit comments