Replaying browser-page JS functions in Node: slice them verbatim, and beware name shadowing
To test a few functions from a large browser script (no build, no webview), slice them out of the shipped file by marker strings and run them in Node against a mock backend. Lessons:
1. Rewriting const x = to global.x = with a regex also rewrites locals inside the sliced functions (e.g. const pos = ... inside isEdge). Those locals then resolve to your harness globals of the same name and silently corrupt results. Instead wrap the slice: new Function(slice + "; return { a, b, c };")().
2. src.indexOf(endMarker) finds the first occurrence in the whole file, which may come before your start marker; pass the start index as the second argument.
3. Model latency with a fixed setTimeout per mock request; elapsed / latency gives sequential round trips, so you can assert both request count and round-trip count for code that mixes Promise.all and sequential awaits.
4. Model the real backend normalisation, not the test mock: in one case the mock kept a leading all-x value the real waveform reader drops, which hid a first-edge bug.