Follows the same pattern as test_esp32_spice_analog.mjs and test_esp32_spice_ntc_bridge.mjs: compile an ESP32 sketch on-the-fly via /api/compile/, boot QEMU through the backend WebSocket, and sweep lux levels while verifying analogRead() returns what ngspice solved. The netlist uses the exact photodiode cards emitted by frontend/.../componentToSpice.ts (D_<id> + I_<id>_ph + DPHOTO model), so any drift in the frontend SPICE mapper surfaces here. Validated against the live Docker container — lux=0/1000/2500 produce raw=4095/2854/992, matching the expected 4095/2854/993 within ±1 LSB and monotonically decreasing with brightness as expected. The package-lock.json churn is a pre-existing drift: eecircuit-engine was in package.json but missing from the lock — npm install re-added it. Companion workflow change (registering the test in backend-e2e-tests.yml) lives in a separate commit that requires a PAT with workflow scope to push. |
||
|---|---|---|
| .. | ||
| README.md | ||
| package-lock.json | ||
| package.json | ||
| rp2040-bootrom.mjs | ||
| test_dht22_simulation.mjs | ||
| test_esp32_spice_analog.mjs | ||
| test_esp32_spice_ntc_bridge.mjs | ||
| test_esp32_spice_photodiode.mjs | ||
| test_esp32_spice_smoke.mjs | ||
| test_hcsr04_simulation.mjs | ||
| test_micropython_esp32.mjs | ||
| test_micropython_pico.mjs | ||
| test_mpu6050_simulation.mjs | ||
README.md
Backend E2E Tests (JavaScript / Node.js)
These tests compile real firmware via the backend API and run the full simulation through a WebSocket, verifying sensor readings in the serial output.
CI status
These tests run in GitHub Actions via .github/workflows/backend-e2e-tests.yml.
The CI workflow:
- Downloads
libqemu-xtensa-amd64.soandlibqemu-riscv32-amd64.sofrom the qemu-prebuilt release. - Downloads ROM files:
esp32-v3-rom.bin,esp32-v3-rom-app.bin,esp32c3-rom.bin. - Installs arduino-cli +
esp32:esp32core. - Starts
uvicorn app.main:app --port 8001withQEMU_ESP32_LIBandQEMU_RISCV32_LIBset. - Runs all three JS tests.
Local prerequisites
-
Backend running with QEMU libs in PATH:
cd backend QEMU_ESP32_LIB=/path/to/libqemu-xtensa.so \ QEMU_RISCV32_LIB=/path/to/libqemu-riscv32.so \ uvicorn app.main:app --reload --port 8001On Windows the
.dllfiles live inbackend/app/services/. -
Node.js 18+ installed.
Run all e2e tests
Use the convenience script from the repo root:
# Windows
scripts\run-e2e-tests.bat
# Or individually (from repo root):
node test/backend/e2e/test_dht22_simulation.mjs --timeout=60
node test/backend/e2e/test_hcsr04_simulation.mjs --timeout=75
node test/backend/e2e/test_mpu6050_simulation.mjs --timeout=60
Tests
| File | Sensor | What it verifies | Typical runtime |
|---|---|---|---|
test_dht22_simulation.mjs |
DHT22 (GPIO4) | Temperature & humidity readings, sensor_update changes values |
~50 s |
test_hcsr04_simulation.mjs |
HC-SR04 (GPIO18/19) | Distance at 10/40/100/200 cm, sensor_update changes distance |
~60 s |
test_mpu6050_simulation.mjs |
MPU-6050 (I2C) | Accelerometer/gyroscope I2C readings | ~40 s |
Pass criteria
| Test | Passes when |
|---|---|
| DHT22 | First reading received + values change after sensor_update |
| HC-SR04 | ≥3 correct readings, ≥2 distances, miss rate ≤30% |
| MPU-6050 | I2C communication established, sensor data in serial output |