Node.jsで使用しているグローバルオブジェクトのモカテストで問題が発生しました。
インデックスファイルで、グローバル変数に値を設定しました
// index.js
global.enums = enumTemp
export default app
そして、それを別のファイルで使用しました
// other.js
status = global.enums.object.status
REST APIであり、サーバーにリクエストを送信した場合は問題なく動作します。ただし、Mochaテストを使用すると、Node.js global variable
の値を取得できないようです。任意のアイデア全員?
私はMochaフックを使用してglobal variable
を設定するだけで機能する解決策をテストのために見つけました:
// setup.test.js
import MyFunc from '../helpers/my-func'
before((done) => {
MyFunc.then((variable) => {
global.variable = variable
done()
})
})
実際のコードと同じように、テストでglobal.variable
を使用できます。
グローバルは醜いので、おそらくあなたの問題も解決するので、グローバルを取り除くべきです。
Node.js require()
の動作については、あまり知られていない事実があります:モジュールは最初のrequireでキャッシュされます。これにより、コストのかかる計算を実行(またはデータベースから何かをフェッチ)し、モジュールを後で使用するときにそれをキャッシュすることができます。
この例を見てください:
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);
これは、same乱数を2回出力し、calculateRandomNumber
モジュールが呼び出されても、randomnumber
は1回だけ呼び出されます別の場所で必要です。