如何在Electron和Spectron之间发送ipcmessage

How to send ipcMessages between Electron and Spectron?

本文关键字:之间 ipcmessage Spectron Electron      更新时间:2023-09-26

我正试图为使用Spectron框架在Electron中实现的应用程序编写一些测试。当我的应用程序已经正常启动时,我想发送一个事件,表示它已经准备好了。比如

在app中:我尝试了这两个

electron.ipcRenderer.send('app-started');
process.send('app-started', "SUCCESS");

在测试中:我试了这两个

beforeEach(function () {
    let pathArgs = path.join(__dirname, '../..');
    app = new Application({
        path: APP_PATH_ELECTRON,
        args: [pathArgs],
        env: {
            TESTING: true,
            NODE_ENV: 'development',
            APPDATA: "C:/tmp"
        }
    });
    return app.start()
        .then(function() {
            assert.equal(app.isRunning(), true);
            client = app.client;
            mainWindow = client.browserWindow;
            ipcRenderer = client.electron.ipcRenderer;
        });
});
it('checks that app-started has been fired', function(done) {
   app.mainProcess.on('app-started', () => {console.log("DONE"); done();});
   app.rendererProcess.on('app-started', () => {console.log("DONE"); done();});
});

done()函数永远不会被调用:(如果你能告诉我哪里出了问题,我将不胜感激。

谢谢!

在您的it测试用例之前没有被解雇吗?

尝试一下,看看事件是否正在触发:

beforeEach(function () {
    let pathArgs = path.join(__dirname, '../..');
    app = new Application({
        path: APP_PATH_ELECTRON,
        args: [pathArgs],
        env: {
            TESTING: true,
            NODE_ENV: 'development',
            APPDATA: "C:/tmp"
        }
    });
    app.mainProcess.on('app-started', () => {console.log("DONE"); done();});
    app.rendererProcess.on('app-started', () => {console.log("DONE"); done();});
    return app.start()
        .then(function() {
            assert.equal(app.isRunning(), true);
            client = app.client;
            mainWindow = client.browserWindow;
            ipcRenderer = client.electron.ipcRenderer;
        });
});