68 lines
2.3 KiB
JavaScript
68 lines
2.3 KiB
JavaScript
|
|
/**
|
|||
|
|
* browserbase-mcp-wrapper.js validateEnv() 单元测试
|
|||
|
|
* 测试环境变量缺失时的快速失败行为
|
|||
|
|
*/
|
|||
|
|
const { execFileSync } = require('child_process');
|
|||
|
|
const path = require('path');
|
|||
|
|
|
|||
|
|
const WRAPPER = path.join(__dirname, '..', 'scripts', 'browserbase-mcp-wrapper.js');
|
|||
|
|
|
|||
|
|
function runWrapper(envOverrides = {}) {
|
|||
|
|
// 构造干净环境:只保留 PATH + 显式覆盖
|
|||
|
|
const env = {
|
|||
|
|
PATH: process.env.PATH || process.env.Path || '',
|
|||
|
|
SystemRoot: process.env.SystemRoot || '',
|
|||
|
|
...envOverrides
|
|||
|
|
};
|
|||
|
|
try {
|
|||
|
|
const out = execFileSync('node', [WRAPPER], {
|
|||
|
|
env,
|
|||
|
|
timeout: 5000,
|
|||
|
|
encoding: 'utf-8',
|
|||
|
|
stdio: ['pipe', 'pipe', 'pipe']
|
|||
|
|
});
|
|||
|
|
return { code: 0, stdout: out, stderr: '' };
|
|||
|
|
} catch (err) {
|
|||
|
|
return {
|
|||
|
|
code: err.status,
|
|||
|
|
stdout: err.stdout || '',
|
|||
|
|
stderr: err.stderr || ''
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
describe('browserbase-mcp-wrapper validateEnv', () => {
|
|||
|
|
test('缺少两个密钥时应 exit(1) 并输出明确错误', () => {
|
|||
|
|
const result = runWrapper({});
|
|||
|
|
expect(result.code).toBe(1);
|
|||
|
|
expect(result.stderr).toContain('BROWSERBASE_API_KEY');
|
|||
|
|
expect(result.stderr).toContain('BROWSERBASE_PROJECT_ID');
|
|||
|
|
expect(result.stderr).toContain('FATAL');
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
test('只缺少 API_KEY 时应报错并列出缺失变量', () => {
|
|||
|
|
const result = runWrapper({ BROWSERBASE_PROJECT_ID: 'FAKE_PROJECT_FOR_UNIT_TEST' });
|
|||
|
|
expect(result.code).toBe(1);
|
|||
|
|
expect(result.stderr).toContain('BROWSERBASE_API_KEY');
|
|||
|
|
expect(result.stderr).not.toContain('BROWSERBASE_PROJECT_ID');
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
test('只缺少 PROJECT_ID 时应报错并列出缺失变量', () => {
|
|||
|
|
const result = runWrapper({ BROWSERBASE_API_KEY: 'FAKE_KEY_FOR_UNIT_TEST' });
|
|||
|
|
expect(result.code).toBe(1);
|
|||
|
|
expect(result.stderr).toContain('BROWSERBASE_PROJECT_ID');
|
|||
|
|
expect(result.stderr).not.toContain('BROWSERBASE_API_KEY');
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
test('两个密钥都存在时不应因 validateEnv 退出', () => {
|
|||
|
|
// 注意: 会因为后续逻辑(代理检查/找不到 MCP bin)退出,
|
|||
|
|
// 但 stderr 不应包含 validateEnv 的 FATAL 信息
|
|||
|
|
const result = runWrapper({
|
|||
|
|
BROWSERBASE_API_KEY: 'FAKE_KEY_FOR_UNIT_TEST',
|
|||
|
|
BROWSERBASE_PROJECT_ID: 'FAKE_PROJECT_FOR_UNIT_TEST'
|
|||
|
|
});
|
|||
|
|
expect(result.stderr).not.toContain('FATAL');
|
|||
|
|
expect(result.stderr).not.toContain('缺少必需环境变量');
|
|||
|
|
});
|
|||
|
|
});
|