fix(test-browser): detect dev server port from project config
Replace all hardcoded localhost:3000 references with dynamic port detection. The command now checks (in priority order): explicit --port argument, CLAUDE.md config, package.json scripts, .env files, then falls back to 3000. Closes #164 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: test-browser
|
name: test-browser
|
||||||
description: Run browser tests on pages affected by current PR or branch
|
description: Run browser tests on pages affected by current PR or branch
|
||||||
argument-hint: "[PR number, branch name, or 'current' for current branch]"
|
argument-hint: "[PR number, branch name, 'current', or --port PORT]"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Browser Test Command
|
# Browser Test Command
|
||||||
@@ -122,31 +122,82 @@ Build a list of URLs to test based on the mapping.
|
|||||||
|
|
||||||
</file_to_route_mapping>
|
</file_to_route_mapping>
|
||||||
|
|
||||||
### 4. Verify Server is Running
|
### 4. Detect Dev Server Port
|
||||||
|
|
||||||
|
<detect_port>
|
||||||
|
|
||||||
|
Determine the dev server port using this priority order:
|
||||||
|
|
||||||
|
**Priority 1: Explicit argument**
|
||||||
|
If the user passed a port number (e.g., `/test-browser 5000` or `/test-browser --port 5000`), use that port directly.
|
||||||
|
|
||||||
|
**Priority 2: CLAUDE.md / project instructions**
|
||||||
|
```bash
|
||||||
|
# Check CLAUDE.md for port references
|
||||||
|
grep -Eio '(port\s*[:=]\s*|localhost:)([0-9]{4,5})' CLAUDE.md 2>/dev/null | grep -Eo '[0-9]{4,5}' | head -1
|
||||||
|
```
|
||||||
|
|
||||||
|
**Priority 3: package.json scripts**
|
||||||
|
```bash
|
||||||
|
# Check dev/start scripts for --port flags
|
||||||
|
grep -Eo '\-\-port[= ]+[0-9]{4,5}' package.json 2>/dev/null | grep -Eo '[0-9]{4,5}' | head -1
|
||||||
|
```
|
||||||
|
|
||||||
|
**Priority 4: Environment files**
|
||||||
|
```bash
|
||||||
|
# Check .env, .env.local, .env.development for PORT=
|
||||||
|
grep -h '^PORT=' .env .env.local .env.development 2>/dev/null | tail -1 | cut -d= -f2
|
||||||
|
```
|
||||||
|
|
||||||
|
**Priority 5: Default fallback**
|
||||||
|
If none of the above yields a port, default to `3000`.
|
||||||
|
|
||||||
|
Store the result in a `PORT` variable for use in all subsequent steps.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Combined detection (run this)
|
||||||
|
PORT="${EXPLICIT_PORT:-}"
|
||||||
|
if [ -z "$PORT" ]; then
|
||||||
|
PORT=$(grep -Eio '(port\s*[:=]\s*|localhost:)([0-9]{4,5})' CLAUDE.md 2>/dev/null | grep -Eo '[0-9]{4,5}' | head -1)
|
||||||
|
fi
|
||||||
|
if [ -z "$PORT" ]; then
|
||||||
|
PORT=$(grep -Eo '\-\-port[= ]+[0-9]{4,5}' package.json 2>/dev/null | grep -Eo '[0-9]{4,5}' | head -1)
|
||||||
|
fi
|
||||||
|
if [ -z "$PORT" ]; then
|
||||||
|
PORT=$(grep -h '^PORT=' .env .env.local .env.development 2>/dev/null | tail -1 | cut -d= -f2)
|
||||||
|
fi
|
||||||
|
PORT="${PORT:-3000}"
|
||||||
|
echo "Using dev server port: $PORT"
|
||||||
|
```
|
||||||
|
|
||||||
|
</detect_port>
|
||||||
|
|
||||||
|
### 5. Verify Server is Running
|
||||||
|
|
||||||
<check_server>
|
<check_server>
|
||||||
|
|
||||||
Before testing, verify the local server is accessible:
|
Before testing, verify the local server is accessible using the detected port:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
agent-browser open http://localhost:3000
|
agent-browser open http://localhost:${PORT}
|
||||||
agent-browser snapshot -i
|
agent-browser snapshot -i
|
||||||
```
|
```
|
||||||
|
|
||||||
If server is not running, inform user:
|
If server is not running, inform user:
|
||||||
```markdown
|
```markdown
|
||||||
**Server not running**
|
**Server not running on port ${PORT}**
|
||||||
|
|
||||||
Please start your development server:
|
Please start your development server:
|
||||||
- Rails: `bin/dev` or `rails server`
|
- Rails: `bin/dev` or `rails server`
|
||||||
- Node/Next.js: `npm run dev`
|
- Node/Next.js: `npm run dev`
|
||||||
|
- Custom port: `/test-browser --port <your-port>`
|
||||||
|
|
||||||
Then run `/test-browser` again.
|
Then run `/test-browser` again.
|
||||||
```
|
```
|
||||||
|
|
||||||
</check_server>
|
</check_server>
|
||||||
|
|
||||||
### 5. Test Each Affected Page
|
### 6. Test Each Affected Page
|
||||||
|
|
||||||
<test_pages>
|
<test_pages>
|
||||||
|
|
||||||
@@ -154,13 +205,13 @@ For each affected route, use agent-browser CLI commands (NOT Chrome MCP):
|
|||||||
|
|
||||||
**Step 1: Navigate and capture snapshot**
|
**Step 1: Navigate and capture snapshot**
|
||||||
```bash
|
```bash
|
||||||
agent-browser open "http://localhost:3000/[route]"
|
agent-browser open "http://localhost:${PORT}/[route]"
|
||||||
agent-browser snapshot -i
|
agent-browser snapshot -i
|
||||||
```
|
```
|
||||||
|
|
||||||
**Step 2: For headed mode (visual debugging)**
|
**Step 2: For headed mode (visual debugging)**
|
||||||
```bash
|
```bash
|
||||||
agent-browser --headed open "http://localhost:3000/[route]"
|
agent-browser --headed open "http://localhost:${PORT}/[route]"
|
||||||
agent-browser --headed snapshot -i
|
agent-browser --headed snapshot -i
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -185,7 +236,7 @@ agent-browser screenshot --full page-name-full.png # Full page
|
|||||||
|
|
||||||
</test_pages>
|
</test_pages>
|
||||||
|
|
||||||
### 6. Human Verification (When Required)
|
### 7. Human Verification (When Required)
|
||||||
|
|
||||||
<human_verification>
|
<human_verification>
|
||||||
|
|
||||||
@@ -214,7 +265,7 @@ Did it work correctly?
|
|||||||
|
|
||||||
</human_verification>
|
</human_verification>
|
||||||
|
|
||||||
### 7. Handle Failures
|
### 8. Handle Failures
|
||||||
|
|
||||||
<failure_handling>
|
<failure_handling>
|
||||||
|
|
||||||
@@ -253,7 +304,7 @@ When a test fails:
|
|||||||
|
|
||||||
</failure_handling>
|
</failure_handling>
|
||||||
|
|
||||||
### 8. Test Summary
|
### 9. Test Summary
|
||||||
|
|
||||||
<test_summary>
|
<test_summary>
|
||||||
|
|
||||||
@@ -263,7 +314,7 @@ After all tests complete, present summary:
|
|||||||
## Browser Test Results
|
## Browser Test Results
|
||||||
|
|
||||||
**Test Scope:** PR #[number] / [branch name]
|
**Test Scope:** PR #[number] / [branch name]
|
||||||
**Server:** http://localhost:3000
|
**Server:** http://localhost:${PORT}
|
||||||
|
|
||||||
### Pages Tested: [count]
|
### Pages Tested: [count]
|
||||||
|
|
||||||
@@ -295,7 +346,7 @@ After all tests complete, present summary:
|
|||||||
## Quick Usage Examples
|
## Quick Usage Examples
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Test current branch changes
|
# Test current branch changes (auto-detects port)
|
||||||
/test-browser
|
/test-browser
|
||||||
|
|
||||||
# Test specific PR
|
# Test specific PR
|
||||||
@@ -303,6 +354,9 @@ After all tests complete, present summary:
|
|||||||
|
|
||||||
# Test specific branch
|
# Test specific branch
|
||||||
/test-browser feature/new-dashboard
|
/test-browser feature/new-dashboard
|
||||||
|
|
||||||
|
# Test on a specific port
|
||||||
|
/test-browser --port 5000
|
||||||
```
|
```
|
||||||
|
|
||||||
## agent-browser CLI Reference
|
## agent-browser CLI Reference
|
||||||
|
|||||||
Reference in New Issue
Block a user