mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
* chore(ai-workflow): track repo-managed review tooling * fix(ai-workflow): remove repo-specific path assumptions Make shared workflow hooks and APK testing guidance resolve paths from the repo and contributor environment so the tooling works for all contributors, not just one machine.
88 lines
2.1 KiB
Markdown
88 lines
2.1 KiB
Markdown
# Request Mocking
|
|
|
|
Intercept, mock, modify, and block network requests.
|
|
|
|
## CLI Route Commands
|
|
|
|
```bash
|
|
# Mock with custom status
|
|
playwright-cli route "**/*.jpg" --status=404
|
|
|
|
# Mock with JSON body
|
|
playwright-cli route "**/api/users" --body='[{"id":1,"name":"Alice"}]' --content-type=application/json
|
|
|
|
# Mock with custom headers
|
|
playwright-cli route "**/api/data" --body='{"ok":true}' --header="X-Custom: value"
|
|
|
|
# Remove headers from requests
|
|
playwright-cli route "**/*" --remove-header=cookie,authorization
|
|
|
|
# List active routes
|
|
playwright-cli route-list
|
|
|
|
# Remove a route or all routes
|
|
playwright-cli unroute "**/*.jpg"
|
|
playwright-cli unroute
|
|
```
|
|
|
|
## URL Patterns
|
|
|
|
```
|
|
**/api/users - Exact path match
|
|
**/api/*/details - Wildcard in path
|
|
**/*.{png,jpg,jpeg} - Match file extensions
|
|
**/search?q=* - Match query parameters
|
|
```
|
|
|
|
## Advanced Mocking with run-code
|
|
|
|
For conditional responses, request body inspection, response modification, or delays:
|
|
|
|
### Conditional Response Based on Request
|
|
|
|
```bash
|
|
playwright-cli run-code "async page => {
|
|
await page.route('**/api/login', route => {
|
|
const body = route.request().postDataJSON();
|
|
if (body.username === 'admin') {
|
|
route.fulfill({ body: JSON.stringify({ token: 'mock-token' }) });
|
|
} else {
|
|
route.fulfill({ status: 401, body: JSON.stringify({ error: 'Invalid' }) });
|
|
}
|
|
});
|
|
}"
|
|
```
|
|
|
|
### Modify Real Response
|
|
|
|
```bash
|
|
playwright-cli run-code "async page => {
|
|
await page.route('**/api/user', async route => {
|
|
const response = await route.fetch();
|
|
const json = await response.json();
|
|
json.isPremium = true;
|
|
await route.fulfill({ response, json });
|
|
});
|
|
}"
|
|
```
|
|
|
|
### Simulate Network Failures
|
|
|
|
```bash
|
|
playwright-cli run-code "async page => {
|
|
await page.route('**/api/offline', route => route.abort('internetdisconnected'));
|
|
}"
|
|
# Options: connectionrefused, timedout, connectionreset, internetdisconnected
|
|
```
|
|
|
|
### Delayed Response
|
|
|
|
```bash
|
|
playwright-cli run-code "async page => {
|
|
await page.route('**/api/slow', async route => {
|
|
await new Promise(r => setTimeout(r, 3000));
|
|
route.fulfill({ body: JSON.stringify({ data: 'loaded' }) });
|
|
});
|
|
}"
|
|
```
|