覆盖全球对实验室测试框架的要求
Override Global require on lab testing framework
我正在使用 hapi 的实验室+代码测试框架。
我需要覆盖全局 require 函数。我正在使用嘲弄,但我也尝试过手动覆盖它但没有任何运气。似乎实验室在沙盒环境中执行所有代码,在沙盒环境中提供了特殊的 require 函数而不是全局函数。如何正确覆盖实验室框架上的全局 require 函数?
提前致谢。
我结束了使用 proxyquire,它提供了一种清晰且声明性的方式来模拟其他模块所需的模块,而不是创建或覆盖任何全局变量。基本上,您创建了一个 require 函数,您可以使用该函数代替正常的 require 来要求您要测试的模块。然后,当该模块对您声明为模拟的东西提出要求时,包装要求将提供模拟而不是原始包。
它的优点是您可以定义部分模型,因此它将 return 一个具有模拟方法的代理作为模型,其余方法将转发到原始包。
这是一个用法示例
// 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 );
我正在使用 hapi 的实验室+代码测试框架。 我需要覆盖全局 require 函数。我正在使用嘲弄,但我也尝试过手动覆盖它但没有任何运气。似乎实验室在沙盒环境中执行所有代码,在沙盒环境中提供了特殊的 require 函数而不是全局函数。如何正确覆盖实验室框架上的全局 require 函数?
提前致谢。
我结束了使用 proxyquire,它提供了一种清晰且声明性的方式来模拟其他模块所需的模块,而不是创建或覆盖任何全局变量。基本上,您创建了一个 require 函数,您可以使用该函数代替正常的 require 来要求您要测试的模块。然后,当该模块对您声明为模拟的东西提出要求时,包装要求将提供模拟而不是原始包。 它的优点是您可以定义部分模型,因此它将 return 一个具有模拟方法的代理作为模型,其余方法将转发到原始包。
这是一个用法示例
// 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 );