You should get rid of the globals because they're ugly, which will probably solve your problem as well.
There's a somewhat little known fact about the way Node.js require() works: Modules are cached on the first require. This makes it possible to run costly calculations (or fetch something from the database) and have it cached on subsequent uses of the module.
Observe this example:
randomnumber.js
const calculateRandomNumber = limit => {
console.log('calculateRandomNumber called');
return parseInt(Math.random() * limit);
};
module.exports = calculateRandomNumber(1000);
other.js
module.exports = require('./randomnumber');
test.js
const randomnumber = require('./randomnumber');
const other = require('./other');
console.log(randomnumber);
console.log(other);
This will output the same random number twice and calculateRandomNumber is called only once, even though the randomnumber module has been required in different places.
Promiseto make sure that had data from database on hands. The problem here is how to use the global variable withMocha. I have found the solution works for me. Anyway, thank everyone for your concern. :)