2

I want to test my Electron application but I feel this is harder than I expected!

Just a simple thing as using the open file dialog seems impossible from what I've seen when I looked around a while!

Is it at all possible, or can I mock this behavior somehow?

My application adds the selected files to a file list and shows some result in a grid. If I can't open files I wont get the grid and can't test if it behaves as expected.

How should I approach this issue if I can't use the file dialog?

This is my test setup:

import { Application } from "spectron";
import { expect } from "chai";

describe("Application", function() {
  this.timeout(10000);

  let app: Application;
  let browser: any;

  before(async () => {
    app = new Application({
      path: electronPath,
      args: [appPath],
    });

    await app.start();
    browser = app.client;
    await browser.waitUntilWindowLoaded();
  });

  after(() => {
      await app.stop();
  });

  it("Starts application", async () => {
    const count = await browser.getWindowCount();
    expect(count).to.equal(1);
  });

  it("should add files", async function() {
    await browser.click("#block-container > div.button-row > div:nth-child(1) > button:nth-child(1)");
    // ???
  });
});

And this is the addFiles method:

public addFiles() {
  const selectedFiles: string[] = this.electronService.remote.dialog.showOpenDialogSync({
    title: "Add files",
    properties: ["openFile", "multiSelections"]
  });

  ...
}
mottosson
  • 2,181
  • 2
  • 22
  • 47

0 Answers0