J'ai un problème avec les tests mocha autour d'un objet global que j'utilise avec Node.js.
Dans le fichier d'index, j'ai mis la valeur à la variable globale
// index.js
global.enums = enumTemp
export default app
Et puis utilisé dans un autre fichier
// other.js
status = global.enums.object.status
C'est REST API et fonctionne bien si j'ai fait une demande à un serveur. Cependant, lorsque j'utilise un test Mocha, il semble que je ne peux pas obtenir la valeur de Node.js global variable
. Une idée tout le monde?
J'ai trouvé une solution qui fonctionne pour moi en utilisant Mocha hooks pour définir global variable
juste pour tester:
// setup.test.js
import MyFunc from '../helpers/my-func'
before((done) => {
MyFunc.then((variable) => {
global.variable = variable
done()
})
})
Nous pouvons utiliser le global.variable
dans le test comme dans le vrai code.
Vous devriez vous débarrasser des globaux car ils sont laids, ce qui résoudra probablement votre problème également.
Il y a un fait peu connu sur le fonctionnement de Node.js require()
: Les modules sont mis en cache lors de la première demande. Cela permet d'exécuter des calculs coûteux (ou d'extraire quelque chose de la base de données) et de le mettre en cache lors des utilisations ultérieures du module.
Observez cet exemple:
const calculateRandomNumber = limit => {
console.log('calculateRandomNumber called');
return parseInt(Math.random() * limit);
};
module.exports = calculateRandomNumber(1000);
module.exports = require('./randomnumber');
const randomnumber = require('./randomnumber');
const other = require('./other');
console.log(randomnumber);
console.log(other);
Cela produira deux fois le même nombre aléatoire et calculateRandomNumber
sera appelé une seule fois, même si le module randomnumber
a été requis dans différents endroits.