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

sootsim detox

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

sootsim detox --config e2e/jest.config.js
sootsim detox -t "login" # jest --testNamePattern
sootsim detox --watch
sootsim detox --headed # keep the SootSim window visible

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

sootsim detox init

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 featureSootSim 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.

{
"scripts": {
"test:native": "detox test",
"test:sootsim": "sootsim detox"
}
}

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.

Next

Ready to build?

Run your React Native app in the browser. No simulators, no native toolchain, no waiting.

curl -fsSL https://sootsim.com/install.sh | sh