npm:electron-mock-ipc | Skypack
You need to enable JavaScript to run this app.
Usage no npm install needed!
<script type="module">
import electronMockIpc from 'https://cdn.skypack.dev/electron-mock-ipc';
</script>
README
ElectronMockIPC
This is a mock library for ipcMain and ipcRenderer in Electron. They communicate with each other, so you can mock ipc methods in your tests without changing your production code.
Install
$ npm install --save-dev electron-mock-ipc
or
$ yarn add --dev electron-mock-ipc
Usage
This library can use in jest, and mocha.
At first, please create a file to mock:
import createIPCMock from 'electron-mock-ipc'
const mocked = createIPCMock()
const ipcMain = mocked.ipcMain
const ipcRenderer = mocked.ipcRenderer
export { ipcMain, ipcRenderer }
and save it as spec/mock/electron-mock.ts
.
Jest
In Jest, please replace electron object using moduleNameMapper
. Please override it in package.json
.
"jest": {
"moduleNameMapper": {
"^electron
quot;: "<rootDir>/spec/mock/electron-mock.ts"
}
}
After that, all ipc objects are mocked, so you can write tests as below.
import { IpcMainEvent } from 'electron'
import { ipcMain } from '~/spec/mock/electron-mock'
import { targetMethod } from '~/src/target'
describe('your test', () => {
it('should be received', async () => {
ipcMain.once('test-event', (event: IpcMainEvent, obj: string) => {
event.sender.send('response-test-event', 'response' + obj)
})
const res = await targetMethod()
expect(res).toEqual('responsehoge')
})
})
Mocha
In Mocha, you can not inject a mock object easily. So, please inject the ipcRenderer object in preload.js
, and use preload.js
to load electron.
import { ipcRenderer } from 'electron'
import { ipcRenderer as mock } from '~/spec/mock/electron-mock'
if (process.env.NODE_ENV === 'test') {
global.ipcRenderer = mock
} else {
global.ipcRenderer = ipcRenderer
}
preload.js
is used to disable nodeIntegration, please refer here .
And write test.
import { IpcMainEvent } from 'electron'
import { targetMethod } from '~/src/target'
import { ipcMain } from '~/spec/mock/electron'
import { describe, it } from 'mocha'
import { expect } from 'chai'
describe('your test', () => {
it('should be received', async () => {
ipcMain.once('test-event', (event: IpcMainEvent, obj: string) => {
event.sender.send('response-test-event', 'response' + obj)
})
const res = await targetMethod()
expect(res).to.equal('responsehoge')
})
})
Example
I prepared a test example, please refer here .
License
The software is available as open source under the terms of the MIT License .
Details
Updated
January 17, 2022
Created
July 7, 2019
Package Security
ES Module Entrypoint
Info
Export Map
Info
added
Keywords
added
License
added
README
added
Repository URL
added
TypeScript Types
License
MIT
Dependencies
0