> ## Documentation Index
> Fetch the complete documentation index at: https://docs.frankieone.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Testing and Debugging

> Drive every outcome without a vendor, and start a journey mid-flow to exercise one screen's configuration.

<Callout icon="flask" color="#FFCA16" iconType="regular">
  `simulate` and `startAt` are development tools. Neither belongs in a production integration —
  both can produce states a real applicant cannot reach.
</Callout>

## Simulate an outcome

`simulate: '<outcome>/<reason>'` settles a journey from a fixture — no vendor, no document, and no
backend decision required — so every branch of your `switch` can be exercised on its own.

```javascript theme={null}
const result = await oneSdk
  .journey(JourneyName.IDV, { container, simulate: 'declined/blocklisted' })
  .start();
// result.outcome === 'declined', result.reason === 'blocklisted'
```

A simulated journey mounts no screen, so it never emits `JOURNEY:READY` — that telemetry event only
fires on a real run.

### Available fixtures

| Outcome | Fixture ids |
| - | - |
| `success` | `success/verified`, `success/verified_manually`, `success/captured` |
| `pending` | `pending/manual_review`, `pending/awaiting_checks`, `pending/processing_timeout` |
| `declined` | `declined/checks_failed`, `declined/declined_manually`, `declined/duplicate`, `declined/blocklisted`, `declined/fraud`, `declined/profile_archived`, `declined/profile_inactive`, `declined/profile_deleted` |
| `abandoned` | `abandoned/session_interrupted`, `abandoned/user_exited` |
| `error` | `error/vendor_load_failed`, `error/vendor_offline`, `error/network`, `error/session_expired`, `error/submit_failed`, `error/internal` |

This list is not every reason code — see [Results](/docs/embedded-flows/journey/results) for the full
vocabulary.

### Reaching attempts\_exhausted

`declined/attempts_exhausted` has no fixture. It's produced by the retry loop, not the simulator, so
reach it by setting the retry budget to one and failing the first attempt:

```javascript theme={null}
oneSdk.journey(JourneyName.IDV, { container, maxAttempts: 1 });
```

## Start mid-flow

`startAt` mounts a journey partway through its screen order, so you can exercise one screen's
configuration without walking every screen before it.

| Value | Flows | Effect |
| - | - | - |
| `'CAPTURE'` | idv, ocr | Skips the pre-capture screens, straight to vendor capture. No effect on ekyc, which has no capture step |
| `'REVIEW'` | idv, ocr, ekyc | Mounts the review form immediately, with nothing before it |

* Applies to the **first attempt only** — a retry runs the normal sequence.
* `startAt: 'REVIEW'` opens the review form with whatever data the entity already holds, which for a
  fresh entity is nothing.
* It composes with `simulate`.
* It can produce states a real applicant cannot reach, so it is not a way to shorten a production flow.

## Running without a backend

`mode: 'dummy'` runs OneSDK entirely on locally mocked responses, with no session token and no API
calls at all. See [SDK Initialization](/docs/sdk-reference/sdk-initialization) for how to set it.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.