testingelectronend-to-endspectron

How can I `await` closing of window in Spectron?


I'm working on Electron application that handles some logic in modal windows. Those windows are waiting for async actions to resolve and then self-close. Now I am struggling to test this behaviour using Spectron and Jest: seems that there are no methods to catch window's closing and then proceed to another tests.

Currently my code is

it('doing its job', async () => {
  // awaits and expects that aren't related

  await app.client.click('button[data-role="close"]');
  await new Promise(r => setTimeout(r, 1000));
  expect(await client.getWindowCount()).toBe(1);
});

It works but I find it extremely anti-pattern. I wonder if there are any methods to do something like

it('doing its job', async () => {
  // awaits and expects that aren't related

  await app.client.click('button[data-role="close"]');
  await app.client.waitUntilWindowCloses(windowIndex);
  expect(await client.getWindowCount()).toBe(1);
});

Any help is appreciated.


Solution

  • await app.client.waitUntil(async () => (await app.client.getWindowCount()) === 1);