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

问题描述 投票:0回答:1

我正在使用 hapi 的实验室+代码测试框架。 我需要重写全局 require 函数。我正在使用嘲笑,但我也尝试手动覆盖它,但没有任何运气。似乎实验室在沙盒环境中执行所有代码,其中提供了特殊的 require 函数而不是全局函数。如何正确覆盖实验室框架上的全局 require 函数?

提前致谢。

javascript unit-testing hapi.js-lab
1个回答
0
投票

我最终使用了 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 );
© www.soinside.com 2019 - 2024. All rights reserved.