gpt4 book ai didi

javascript - [node][mocha]使用 mocha 测试时无法访问全局变量

转载 作者:行者123 更新时间:2023-12-01 15:32:51 25 4
gpt4 key购买 nike

我正在尝试为快速 Node 应用程序创建一个单元测试。
我希望用于测试的配置与生产中使用的配置不同,因此我实现了以下配置。

在我的 index.js ,我将配置加载到全局变量中,如下所示:

global.env = {};
global.env.config = require('./config/config');
// Create the server ...
server.listen(3000);

module.exports = server;

在其他一些 Controller 中 myController.js ,我像这样访问全局变量
var Config = global.env.config

当我使用 node index.js 启动它时它工作得很好。

但是当我使用 mocha 和 proxyquire 来覆盖配置时:
describe('myController', function () {
describe("#myMethod", () => {

it("must work", (done) => {
const config = {
INPUT_FILE_DIR: path.resolve('../ressources/input/')
}

const server = proxyquire('../index.js', { './config/config': config })// error in this line
})
})
})

我有一个错误告诉 myController无法读取属性配置
Cannot read property 'config' of undefined

谢谢你的帮助

最佳答案

这就是我接近它的方式。首先,我会将配置导出为函数而不是对象。

原因是代码将具有更好的结构并且易于维护。
此外,无需全局公开配置,因为这可能会带来一些安全风险。

export const getConfig = () => {
if(process.env.NODE_ENV==="production"){
return require('./production.config');
}
return require('./default.config');
};

在我的测试文件中,我将使用 sinonjs 模拟函数调用。如下所示。

const configModule = require("./config");
sinon.stub(configModule, "getConfig").returns(require('./e2e.config'));

这不是经过测试的代码,但我有点确定这种思维模式应该有效。

关于javascript - [node][mocha]使用 mocha 测试时无法访问全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60990025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com