Describe the bug
Calling testWithSpectron() hangs the tests, and starts opening as many Electron windows as it can until the tests time out.
To Reproduce
Run the following spec:
import testWithSpectron from "vue-cli-plugin-electron-builder/lib/testWithSpectron";
import chai, { expect } from "chai";
import chaiAsPromised from "chai-as-promised";
chai.use(chaiAsPromised);
describe("Application launch", function() {
this.timeout(30000);
beforeEach(function() {
console.log("Before Each -- testWithSpectron()");
return testWithSpectron().then(instance => {
console.log("testWithSpectron().then");
this.app = instance.app;
this.stopServe = instance.stopServe;
});
});
beforeEach(function() {
console.log("Before Each -- chaiAsPromised");
chaiAsPromised.transferPromiseness = this.app.transferPromiseness;
});
afterEach(function() {
console.log("After");
if (this.app && this.app.isRunning()) {
return this.stopServe();
}
});
it("opens a window", function() {
console.log("opens?");
const gwc = this.app.client.getWindowCount();
console.log(gwc);
return expect(gwc).to.eventually.have.at.least(1);
});
});
Expected behavior
I expected the output
> Before Each -- testWithSpectron()
> testWithSpectron().then
> Before Each -- chaiAsPromised
> opens?
> After
And for it to only open one Electron window (or maybe even 0, if it should be headless).
Instead, it opens 5-10 windows (just keeps going until Mocha times out).
Screenshots



Environment (please complete the following information):
// vue.config.js
const path = require("path");
module.exports = {
configureWebpack: {
resolve: {
alias: {
Disciplines$: path.join(__dirname, "src/assets/earthdawn/disciplines"),
Races$: path.join(__dirname, "src/assets/earthdawn/races"),
Skills$: path.join(__dirname, "src/assets/earthdawn/skills"),
Talents$: path.join(__dirname, "src/assets/earthdawn/talents"),
},
},
},
chainWebpack: config => {
config.module
.rule("yaml")
.test(/\.ya?ml$/)
.use("js-yaml-loader")
.loader("js-yaml-loader")
.end();
},
pluginOptions: {
electronBuilder: {
chainWebpackMainProcess: config => {
config.resolve.alias.set("@", path.join(__dirname, "src/"));
},
},
},
};
Additional context
N/A
@thislooksfun any luck with that? I am also stumbling on the exact same issue.
If you in hurry, just like me.
try
npm i -D git://github.com/ekoeryanto/vue-cli-plugin-electron-builder#patch-1
I had the same issue and couldn't find any solution until now. Your patch solved it nicely :)
V2.0 of this plugin includes an upgrade to spectron. I will release it soon, but for now: yarn add -D vue-cli-plugin-electron-builder@alpha.
For me only the @ekoeryanto patch works, the alpha version still opens infinite windows until timeout.
With the v2.0.0 beta, you pass the spectron module to the testWithSpectron function, so you can install the proper version of spectron to match your electron version.
Most helpful comment
With the v2.0.0 beta, you pass the spectron module to the
testWithSpectronfunction, so you can install the proper version of spectron to match your electron version.