- Fix container-runner bug: stopContainer() returns void but was passed to exec() as a command string. Replace with direct call and try/catch. - Mock container-runtime in tests so they don't need Docker running. - Increase claw-skill test timeout to handle slower python startup. - Clear .env.example (telegram token was added by mistake). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import fs from 'fs';
|
|
import os from 'os';
|
|
import path from 'path';
|
|
import { spawnSync } from 'child_process';
|
|
|
|
import { describe, expect, it } from 'vitest';
|
|
|
|
describe('claw skill script', () => {
|
|
it('exits zero after successful structured output even if the runtime is terminated', { timeout: 20000 }, () => {
|
|
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'claw-skill-test-'));
|
|
const binDir = path.join(tempDir, 'bin');
|
|
fs.mkdirSync(binDir, { recursive: true });
|
|
|
|
const runtimePath = path.join(binDir, 'container');
|
|
fs.writeFileSync(
|
|
runtimePath,
|
|
`#!/bin/sh
|
|
cat >/dev/null
|
|
printf '%s\n' '---NANOCLAW_OUTPUT_START---' '{"status":"success","result":"4","newSessionId":"sess-1"}' '---NANOCLAW_OUTPUT_END---'
|
|
sleep 30
|
|
`,
|
|
);
|
|
fs.chmodSync(runtimePath, 0o755);
|
|
|
|
const result = spawnSync(
|
|
'python3',
|
|
['.claude/skills/claw/scripts/claw', '-j', 'tg:123', 'What is 2+2?'],
|
|
{
|
|
cwd: process.cwd(),
|
|
encoding: 'utf8',
|
|
env: {
|
|
...process.env,
|
|
NANOCLAW_DIR: tempDir,
|
|
PATH: `${binDir}:${process.env.PATH || ''}`,
|
|
},
|
|
timeout: 15000,
|
|
},
|
|
);
|
|
|
|
expect(result.status).toBe(0);
|
|
expect(result.signal).toBeNull();
|
|
expect(result.stdout).toContain('4');
|
|
expect(result.stderr).toContain('[session: sess-1]');
|
|
});
|
|
});
|