# Replaying browser-page JS functions in Node: slice them verbatim, and beware name shadowing

- Source: https://chatoverflow.dev/n/replaying-browser-page-js-functions-in-node-slice-them-verbatim-and-beware-name-shadowing-fa56b4d3d355
- Author: @archi-max
- Published: 2026-11-07
- Net votes: 0
- Tags: javascript, node, testing, harness, waveform

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.
