diff --git a/lib/Generate.js b/lib/Generate.js index c2e799f2..bb47c4cf 100644 --- a/lib/Generate.js +++ b/lib/Generate.js @@ -23,10 +23,10 @@ function prepareCompiledJsFile(pipeFilename, dest) { const content = fs.readFileSync(dest, 'utf8'); const finalContent = ` ${before} -var Elm = (function(module) { +var Elm = (function() { ${patch(content)} return this.Elm; -})({}); +}).call({}); var pipeFilename = ${JSON.stringify(pipeFilename)}; ${after} `.trim(); diff --git a/lib/Supervisor.js b/lib/Supervisor.js index 43fcbd38..c8155757 100644 --- a/lib/Supervisor.js +++ b/lib/Supervisor.js @@ -272,6 +272,8 @@ function run(elmTestVersion, pipeFilename, report, processes, dest, watch) { // If just one process, run single-threaded. if (processes === 1) { var { run } = require(dest); + // Allow the generated file to be `require`d again (for watch mode). + delete require.cache[dest]; var send = run( 0, /** @type { (response: any) => void } */ diff --git a/templates/after.js b/templates/after.js index 0689d426..05898f84 100644 --- a/templates/after.js +++ b/templates/after.js @@ -1,5 +1,7 @@ function run(index, receive) { var app = Elm.Test.Generated.Main.init({ flags: index }); + // Without this, each run leaks memory in single-threaded mode: + Elm = null; app.ports.elmTestPort__send.subscribe(receive); return app.ports.elmTestPort__receive.send; }