Detox suites
sootsim detox runs Detox-style suites against SootSim. It shells out to
your own Jest, so your Jest version, transforms, and setupFiles keep
working; the one thing it forces is that import ... from 'detox' resolves
to the SootSim driver.
Run an existing suite
terminal
Test discovery checks e2e/, test/e2e/, and detox/ (or set
SOOTSIM_TEST_DIR). If a sootsim-detox.config.cjs, jest.config.cjs, or
jest.config.js exists it is used; otherwise the SootSim preset is applied
directly. Useful flags:
terminal
If no SootSim shell is reachable, the runner warns and tells you how to start
one; pass --no-launch when you manage the shell yourself.
Start from scratch
terminal
scaffolds sootsim-detox.config.cjs plus a runnable e2e/example.test.ts
using by, device, element, expect, and waitFor from detox.
What the driver supports
Matchers (by.id, by.text, by.label, by.role, by.type), actions
(tap, longPress, typeText, replaceText, clearText, scroll,
swipe, takeScreenshot), and the assertion set
(toBeVisible, toExist, toHaveText, toHaveLabel, toHaveValue,
toBeEnabled, and their negations). The full API lives in
Detox Driver.
Migrating from native Detox
device.launchApp() and device.reloadReactNative() work as expected. Some
device methods depend on native capabilities SootSim intentionally handles
differently:
| detox feature | SootSim behavior |
|---|---|
device.takeScreenshot() | captures a canvas screenshot |
device.shake() | no-op |
device.sendToHome() | no-op |
device.installApp() / uninstallApp() | no-op (runs in the browser) |
device.setLocation() | no-op (use config instead) |
device.setURLBlacklist() | no-op |
Many teams keep both: SootSim in CI for fast feedback on every PR, native Detox for a final device pass.
Results in CI and the dashboard
The exit code is Jest’s exit code, so any CI can gate on it with no account. When the suite runs in CI through the SootSim GitHub integration (or with an API key), the run also registers in your org dashboard with the test counts and the first failure, so a red suite is visible in the Runs view without opening CI logs.
