diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..21e1944c --- /dev/null +++ b/jest.config.js @@ -0,0 +1,7 @@ +module.exports = { + globals: { + __APP__: undefined, // A different app will be launched in each test environment + }, + testEnvironment: "./tests/environment", + testTimeout: 30000, // 30s +}; diff --git a/tests/environment.js b/tests/environment.js new file mode 100644 index 00000000..2a80b3df --- /dev/null +++ b/tests/environment.js @@ -0,0 +1,45 @@ +const path = require("path"); + +const getPort = require("get-port"); +const NodeEnvironment = require("jest-environment-node"); +const { Application } = require("spectron"); + +class TestEnvironment extends NodeEnvironment { + constructor(config) { + super(config); + } + + async setup() { + await super.setup(); + + const electronPath = path.resolve( + __dirname, + "..", + "node_modules", + ".bin", + "electron" + ); + const appPath = path.resolve(__dirname, ".."); + const port = await getPort(); + + this.global.__APP__ = new Application({ + path: electronPath, + args: [appPath], + port, + }); + await this.global.__APP__.start(); + const { client } = this.global.__APP__; + await client.waitUntilWindowLoaded(); + } + + async teardown() { + await this.global.__APP__.stop(); + await super.teardown(); + } + + runScript(script) { + return super.runScript(script); + } +} + +module.exports = TestEnvironment;