覆盖全球对实验室测试框架的要求

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