如何在mocha测试

时间:2017-07-12 04:31:26

标签: javascript node.js testing mocha

我在使用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的值。对每个人都有意见吗?

2 个答案:

答案 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 。这使得可以运行昂贵的计算(或从数据库中获取某些东西)并将其缓存在模块的后续使用中。

观察这个例子:

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);

这将输出两次相同的随机数,calculateRandomNumber仅被调用一次,即使在不同的地方需要randomnumber模块。