Testing ElectronJS With Mocha & Spectron
In this post I will be outlining how to test your ElectronJS Apps with spectron and mocha.
First to get started we need to install spectron.
!!!!IMPORTANT!!!!! this threw me for a while with compatibility issues go to the GitHub page and make sure you are using a spectron version compatible with your ElectronJS version.
https://github.com/electron-userland/spectron
I am using.
"devDependencies": {
    "electron": "^13.0.0",
    "mocha": "^9.1.2",
    "spectron": "^15.0.0"
  },
If you add the packages with the correct versions you can just run.
npm install
Now in your package.json add you test run command.
"scripts": {
    "test": "NODE_ENV=test mocha"
},
Use the example from the GitHub page.
const Application = require('spectron').Application
const assert = require('assert')
const electronPath = require('electron') // Require Electron from the binaries included in node_modules.
const path = require('path')
//const utils = require('../utils/helpers')
describe('Application launch', function() {
    this.timeout(10000)
    beforeEach(function() {
        this.app = new Application({
            path: electronPath,
            args: [path.join(__dirname, '..')]
        })
        return this.app.start()
    })
    afterEach(function() {
        if (this.app && this.app.isRunning()) {
            return this.app.stop()
        }
    })
    it('shows an initial window', function() {
        return this.app.client.getWindowCount().then(function(count) {
            assert.equal(count, 1)
            // Please note that getWindowCount() will return 2 if `dev tools` are opened.
            // assert.equal(count, 2)
        })
    })
    /*it('test image resize', async () => {
        const img = await utils.resizeImage({
            outputfolder: '/Users/samueleast/Desktop/S3AppUnitTests',
            media: '/Users/samueleast/Desktop/Doctor.png',
            height: 20,
            width: 20
        });
        assert.equal(img, 'Success')
    })*/
})
You can now run.
npm test
And start to test your code.
I kept getting this error.
Error: Timeout of 10000ms exceeded. For async tests and hooks, ensure "done()" is called;
Make sure you are using these versions.
"devDependencies": {
    "electron": "^13.0.0",
    "mocha": "^9.1.2",
    "spectron": "^15.0.0"
  },
It seems spectron is no longer being maintained probably worth finding another testing tool for electron. If anyone has any suggestions let me know.
 
		

