有没有办法告诉测试框架(nodeunit,mocha,should)为每个测试重新加载'required'模块?
我的模块有多个测试,我发现由于Node的模块系统将模块缓存在第一个require()
上,后续测试运行会遇到同一个对象(具有旧状态,包括注入的模拟对象)不再适用于套件中的下一个测试。)
所以正在发生的事情是TDD促使我创建了一个类似的模块:
// my module
module.exports = function(dep1, dep2) {
// code goes here, makes use of dep1/dep2
}
我的第一次测试为dep1注入了一个模拟;下一个测试为dep2注入一个模拟。但由于require()
总是返回我的模块的同一个实例,所以第二个测试的模拟永远不会被正确注入。测试都在相同的受测试对象上运行,这很糟糕。
一种解决方案是重新设计模块以支持“new”,并且每次都返回一个新实例。在我走这条路之前,有没有办法强制模块在测试环境中重新加载?