jhnns / rewire

Easy monkey-patching for node.js unit tests
MIT License
3.08k stars 128 forks source link

Rewire tests passed when code requires self. #148

Open gabe0x02 opened 6 years ago

gabe0x02 commented 6 years ago

I recently had a production issue when a require('./thisFile') got merged into a piece of code. The code passed tests using rewire but totally crashed without it. Here's an example:

Node: 8.10.0 Rewire: ^4.0.1

// code.js
const t = require('./code');

const mod = {};

mod.a = function a() {
    console.log('a');
    t.b();
};

mod.b = function b() {
    console.log('b');
};

module.exports = mod;
// require.js
const t = require('./code');
t.a();
// rewire.js
const rewire = require('rewire');
const t = rewire('./code');

t.a();
$ node require.js 
a
/code.js:7
    t.b();
      ^

TypeError: t.b is not a function
    at Object.a (/code.js:7:4)
    at Object.<anonymous> (/require.js:2:3)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:188:16)
    at bootstrap_node.js:609:3
$ node rewire.js 
a
b