我在使用Node.js的全局对象周围进行了mocha测试时遇到了问题。
在索引文件中,我将值设置为全局变量
// index.js
global.enums = enumTemp
export default app
然后在另一个文件中使用它
// other.js
status = global.enums.object.status
它是REST API,如果我向服务器发出请求,它运行良好。但是,当我使用Mocha测试时,我似乎无法获得Node.js global variable
的值。对每个人都有意见吗?
答案 0 :(得分:9)
我找到了一个适用于我的解决方案,使用 Mocha挂钩设置global variable
仅用于测试:
// setup.test.js
import MyFunc from '../helpers/my-func'
before((done) => {
MyFunc.then((variable) => {
global.variable = variable
done()
})
})
我们可以在测试中使用global.variable
,就像在真实代码中一样。
答案 1 :(得分:2)
你应该摆脱全局,因为它们很难看,这也可能解决你的问题。
关于Node.js require()
的工作方式,有一点鲜为人知的事实: Modules are cached on the first 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);
这将输出两次相同的随机数,calculateRandomNumber
仅被调用一次,即使在不同的地方需要randomnumber
模块。