我正在使用 hapi 的实验室+代码测试框架。 我需要重写全局 require 函数。我正在使用嘲笑,但我也尝试手动覆盖它,但没有任何运气。似乎实验室在沙盒环境中执行所有代码,其中提供了特殊的 require 函数而不是全局函数。如何正确覆盖实验室框架上的全局 require 函数?
提前致谢。
我最终使用了 proxyquire,它提供了一种清晰且声明性的方式来模拟其他模块所需的模块,而不是创建或覆盖任何全局变量。基本上,您创建一个使用的 require 函数,而不是使用普通的 require 来要求要测试的模块。然后,当该模块要求您声明为模拟的内容时,包装要求将提供模拟而不是原始包。 它的优点是您可以定义部分模型,因此它将返回一个代理,该代理将模拟方法作为模型,其余方法将转发到原始包。
这是一个使用示例
// Mockups
const ProxyQuire = require( 'proxyquire' );
const mockupPaths = {
'mongodb': require( './__mocks__/mongo' ),
'fs': {
readFileSync( path ) {
if ( path !== 'PATH/TO/CERTS' ) {
return Fs.readFileSync( path );
}
return 'A VERY LONG STRING THAT LOOKS LIKE A CERTIFICATE!!';
}
}
};
// What we want to test
const Connect = ProxyQuire( '../src/db-connect.js', mockupPaths );