gpt4 book ai didi

javascript - 如何在 ElectronJS 中模拟 require

转载 作者:行者123 更新时间:2023-12-03 05:14:10 30 4
gpt4 key购买 nike

我正在尝试为我的 electro js 应用程序编写单元测试,但我被困在一个地方。

例如

假设我的应用程序代码如下所示

var app= (function () {
function app() {
var _this = this;
this.open = function (data) {
var deferred = Q.defer();
try {
// some code
}
catch (ex) {
deferred.reject(ex);
}
return deferred.promise;
};

}
}());
exports.app = app

现在,如果我想在 Electron 客户端上运行它,它会运行得很好,因为 Electron 模块安装在客户端的 PC 上

问题是当我尝试为上述内容编写单元测试用例时,因为 Electron 没有安装在开发机器上,如下所示

    import { app} from '../../app'
import { Rights } from '../../Rights'
describe('app', () => {
let app: app;
beforeEach(() => {
app= new app();
})

it('should call open() and return error for null content', function (done) {
let output = app.open(null);
output
.then((res) => {
//expectation
done();
})
.catch((err)=>{
//expectation
done();
})
})
})

出现以下错误

Error: Cannot find module 'electron'                                                                                                                                                      
at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (<project pat>/app.js:2:16)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
npm ERR! Test failed. See above for more details.

问题

  • 如何模拟开发 PC 上未安装的任何模块的 require但实际执行时需要(安装在客户端的 PC 上)。

最佳答案

您可以通过覆盖module._load来拦截require调用:

const m = require('module');
const originalLoader = m._load;
const stubs = { electron : {} };

m._load = function hookedLoader(request, parent, isMain) {
const stub = stubs[request];
return stub || originalLoader(request, parent, isMain);
};

关于javascript - 如何在 ElectronJS 中模拟 require,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41674033/

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