Skip to content

Why You Should Specify IDs in Stubs ​

Every stub has a UUID. If a stub file does not carry one, GripMock generates a UUIDv4 on load — so the stub works either way, but its ID changes every time the file is reloaded. Writing the ID down keeps it stable.

1. The ID must be a UUID ​

yaml
- id: 7f746310-a470-43dc-9eeb-355dff50d2a9
  service: BookingService
  method: GetBooking
  input:
    equals:
      bookingId: "booking_123"
  output:
    data:
      bookingTime:
        startTime: "2024-01-01T00:00:00Z"
        endTime: "2024-01-01T23:59:59Z"

A custom string such as my_stub_123 fails to parse. Generate one with uuidgen or with the UUID tools.

bash
http://localhost:4771/#/stubs/7f746310-a470-43dc-9eeb-355dff50d2a9/show

WARNING

Search by ID in the admin panel is not available yet; use the direct URL.

3. Deleting a stub by ID ​

bash
# Find unused stubs
curl http://localhost:4771/api/stubs/unused

# Delete one
curl -X DELETE http://localhost:4771/api/stubs/7f746310-a470-43dc-9eeb-355dff50d2a9

Without a written ID, the value you read from /api/stubs/unused is only valid until the next reload.

4. Live reloading ​

The stub watcher is on by default and reloads changed files without a restart:

bash
STUB_WATCHER_ENABLED=true   # default: true
STUB_WATCHER_INTERVAL=1s    # default: 1s, timer mode only
STUB_WATCHER_TYPE=fsnotify  # default: fsnotify; other option: timer

Reloading works with or without IDs. What IDs change is the outcome. A stub with a written ID is updated in place. An ID-less stub is re-assigned from the pool of IDs that file held before, handed out in file order — so inserting or deleting a stub in the middle of the file shifts every ID after it onto a different stub. Anything holding the old value — a bookmark, a DELETE call, a test fixture — now points somewhere else.

INFO

In timer mode GripMock does not reload every file each tick. It reloads only files whose modification time changed.

5. Collision prevention ​

Unique IDs keep two teams from overwriting each other's stubs:

yaml
# Team A
- id: 6e8b4c2a-3d8f-4a1b-8c9d-0e7f2a9b8c7d
  service: Payments
  method: Process

# Team B
- id: 9f1a2b3c-4d5e-6f7a-8b9c-0d1e2f3a4b5c
  service: Payments
  method: Refund

Do not reuse an ID across environments.