豆豆友情提示:这是一个非官方 GitHub 代理镜像,主要用于网络测试或访问加速。请勿在此进行登录、注册或处理任何敏感信息。进行这些操作请务必访问官方网站 github.com。 Raw 内容也通过此代理提供。
Skip to content

Commit 8a3a1b7

Browse files
authored
test: improve cli test (#1121)
Use async spawn, and make the logs visible in CI.
1 parent 013110b commit 8a3a1b7

File tree

1 file changed

+62
-44
lines changed

1 file changed

+62
-44
lines changed

tests/e2e/chrome-devtools.test.ts

Lines changed: 62 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,129 +5,147 @@
55
*/
66

77
import assert from 'node:assert';
8-
import {spawnSync} from 'node:child_process';
8+
import {spawn} from 'node:child_process';
99
import path from 'node:path';
1010
import {describe, it, afterEach, beforeEach} from 'node:test';
1111

1212
const CLI_PATH = path.resolve('build/src/bin/chrome-devtools.js');
1313

14+
async function runCli(
15+
args: string[],
16+
): Promise<{status: number | null; stdout: string; stderr: string}> {
17+
return new Promise((resolve, reject) => {
18+
const child = spawn('node', [CLI_PATH, ...args]);
19+
let stdout = '';
20+
let stderr = '';
21+
child.stdout.on('data', chunk => {
22+
stdout += chunk;
23+
process.stdout.write(chunk);
24+
});
25+
child.stderr.on('data', chunk => {
26+
stderr += chunk;
27+
process.stderr.write(chunk);
28+
});
29+
child.on('close', status => resolve({status, stdout, stderr}));
30+
child.on('error', reject);
31+
});
32+
}
33+
1434
describe('chrome-devtools', () => {
15-
function assertDaemonIsNotRunning() {
16-
const result = spawnSync('node', [CLI_PATH, 'status']);
35+
async function assertDaemonIsNotRunning() {
36+
const result = await runCli(['status']);
1737
assert.strictEqual(
18-
result.stdout.toString(),
38+
result.stdout,
1939
'chrome-devtools-mcp daemon is not running.\n',
2040
);
2141
}
2242

23-
function assertDaemonIsRunning() {
24-
const result = spawnSync('node', [CLI_PATH, 'status']);
43+
async function assertDaemonIsRunning() {
44+
const result = await runCli(['status']);
2545
assert.ok(
26-
result.stdout
27-
.toString()
28-
.startsWith('chrome-devtools-mcp daemon is running.\n'),
46+
result.stdout.startsWith('chrome-devtools-mcp daemon is running.\n'),
2947
'chrome-devtools-mcp daemon is not running',
3048
);
3149
}
3250

33-
beforeEach(() => {
34-
spawnSync('node', [CLI_PATH, 'stop']);
35-
assertDaemonIsNotRunning();
51+
beforeEach(async () => {
52+
await runCli(['stop']);
53+
await assertDaemonIsNotRunning();
3654
});
3755

38-
afterEach(() => {
39-
spawnSync('node', [CLI_PATH, 'stop']);
40-
assertDaemonIsNotRunning();
56+
afterEach(async () => {
57+
await runCli(['stop']);
58+
await assertDaemonIsNotRunning();
4159
});
4260

43-
it('reports daemon status correctly', () => {
44-
assertDaemonIsNotRunning();
61+
it('reports daemon status correctly', async () => {
62+
await assertDaemonIsNotRunning();
4563

46-
const startResult = spawnSync('node', [CLI_PATH, 'start']);
64+
const startResult = await runCli(['start']);
4765
assert.strictEqual(
4866
startResult.status,
4967
0,
50-
`start command failed: ${startResult.stderr.toString()}`,
68+
`start command failed: ${startResult.stderr}`,
5169
);
5270

53-
assertDaemonIsRunning();
71+
await assertDaemonIsRunning();
5472
});
5573

56-
it('can start and stop the daemon', () => {
57-
assertDaemonIsNotRunning();
74+
it('can start and stop the daemon', async () => {
75+
await assertDaemonIsNotRunning();
5876

59-
const startResult = spawnSync('node', [CLI_PATH, 'start']);
77+
const startResult = await runCli(['start']);
6078
assert.strictEqual(
6179
startResult.status,
6280
0,
63-
`start command failed: ${startResult.stderr.toString()}`,
81+
`start command failed: ${startResult.stderr}`,
6482
);
6583

66-
assertDaemonIsRunning();
84+
await assertDaemonIsRunning();
6785

68-
const stopResult = spawnSync('node', [CLI_PATH, 'stop']);
86+
const stopResult = await runCli(['stop']);
6987
assert.strictEqual(
7088
stopResult.status,
7189
0,
72-
`stop command failed: ${stopResult.stderr.toString()}`,
90+
`stop command failed: ${stopResult.stderr}`,
7391
);
7492

75-
assertDaemonIsNotRunning();
93+
await assertDaemonIsNotRunning();
7694
});
7795

7896
it('can invoke list_pages', async () => {
79-
assertDaemonIsNotRunning();
97+
await assertDaemonIsNotRunning();
8098

81-
const startResult = spawnSync('node', [CLI_PATH, 'start']);
99+
const startResult = await runCli(['start']);
82100
assert.strictEqual(
83101
startResult.status,
84102
0,
85-
`start command failed: ${startResult.stderr.toString()}`,
103+
`start command failed: ${startResult.stderr}`,
86104
);
87105

88-
const listPagesResult = spawnSync('node', [CLI_PATH, 'list_pages']);
106+
const listPagesResult = await runCli(['list_pages']);
89107
assert.strictEqual(
90108
listPagesResult.status,
91109
0,
92-
`list_pages command failed: ${listPagesResult.stderr.toString()}`,
110+
`list_pages command failed: ${listPagesResult.stderr}`,
93111
);
94112
assert(
95-
listPagesResult.stdout.toString().includes('about:blank'),
113+
listPagesResult.stdout.includes('about:blank'),
96114
'list_pages output is unexpected',
97115
);
98116

99-
assertDaemonIsRunning();
117+
await assertDaemonIsRunning();
100118
});
101119

102120
it('can take screenshot', async () => {
103-
const startResult = spawnSync('node', [CLI_PATH, 'start']);
121+
const startResult = await runCli(['start']);
104122
assert.strictEqual(
105123
startResult.status,
106124
0,
107-
`start command failed: ${startResult.stderr.toString()}`,
125+
`start command failed: ${startResult.stderr}`,
108126
);
109127

110-
const result = spawnSync('node', [CLI_PATH, 'take_screenshot']);
128+
const result = await runCli(['take_screenshot']);
111129
assert.strictEqual(
112130
result.status,
113131
0,
114-
`take_screenshot command failed: ${result.stderr.toString()}`,
132+
`take_screenshot command failed: ${result.stderr}`,
115133
);
116134
assert(
117-
result.stdout.toString().includes('.png'),
135+
result.stdout.includes('.png'),
118136
'take_screenshot output is unexpected',
119137
);
120138
});
121139

122-
it('forwards disclaimers to stderr on start', () => {
123-
const result = spawnSync('node', [CLI_PATH, 'start']);
140+
it('forwards disclaimers to stderr on start', async () => {
141+
const result = await runCli(['start']);
124142
assert.strictEqual(
125143
result.status,
126144
0,
127-
`start command failed: ${result.stderr.toString()}`,
145+
`start command failed: ${result.stderr}`,
128146
);
129147
assert(
130-
result.stderr.toString().includes('chrome-devtools-mcp exposes content'),
148+
result.stderr.includes('chrome-devtools-mcp exposes content'),
131149
'Disclaimer not found in stderr on start',
132150
);
133151
});

0 commit comments

Comments
 (0)