Spectron app.client.close () не срабатывает при (событие закрытия) - PullRequest
0 голосов
/ 11 июля 2019

У меня есть многооконное электронное приложение, а именно оно состоит из окна запуска и главного окна.

Основной процесс отвечает за первое отображение модуля запуска, а после того, как все инициализируется, он получает событие через ipc и показывает главное окно, скрывающее модуль запуска.

Я использую on('close') в главном окне, чтобы определить, когда пользователь закрывает главное окно, чтобы снова показать панель запуска и выполнить некоторую логику удаления, после того как приложение будет завершено.

 this.mainWindow = new BrowserWindow({width: 1024, height: 768, webPreferences: {nodeIntegration: true}});
        this.mainWindow.setMenu(null);
        this.mainWindow.on('close', () => {
            this.logger.debug('"close" received');
            this.mainWindow.hide();
            this.launcherWindow.show();
            this.sendShutdown();
        });

Это работает довольно хорошо, теперь я хочу провести интеграционное тестирование этого поведения со Spectron. У меня проблема с отправкой сигнала закрытия в окно, эмулируя нажатие кнопки закрытия.

it('should start shutting down the services gracefully if the user clicks on the close button', async () => {  
  await app.client.windowByIndex(1);
  await app.client.close();
  //..... expectations that verify the launcher window is visible now
});

Я проверил, что окно с индексом 1 является основным окном. Когда я вызываю app.client.close();, главное окно закрывается, но я вижу в журналах, что событие on('close', ) главного окна не вызывается, поэтому оно не возвращается к панели запуска.

Есть ли что-то, что я пропускаю / неправильно понимаю?

1 Ответ

0 голосов
/ 12 июля 2019

В итоге я обернул код, который был выполнен в дополнительном методе, а также связал этот метод с событием ipcMain.on("should-shutdown",... В любом случае это имело смысл, поскольку другие рендеры также могут запросить плавное отключение.

В тесте Spectron я тогда использовал

 const { ipcRenderer } = app.electron;
 ipcRenderer.send('smooth-shutdown');

вместо app.client.close() для запуска последовательности выключения.

...