Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/h3poteto/electron-mock-ipc
Mock Electron's ipcMain, and ipcRenderer
https://github.com/h3poteto/electron-mock-ipc
electron ipcmain ipcrenderer mock typescript
Last synced: 12 days ago
JSON representation
Mock Electron's ipcMain, and ipcRenderer
- Host: GitHub
- URL: https://github.com/h3poteto/electron-mock-ipc
- Owner: h3poteto
- License: mit
- Created: 2019-07-06T13:52:33.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-06-01T03:57:04.000Z (over 1 year ago)
- Last Synced: 2024-10-30T00:47:16.561Z (14 days ago)
- Topics: electron, ipcmain, ipcrenderer, mock, typescript
- Language: TypeScript
- Homepage:
- Size: 1.28 MB
- Stars: 23
- Watchers: 3
- Forks: 6
- Open Issues: 23
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE.txt
- Codeowners: CODEOWNERS
Awesome Lists containing this project
- awesome-list - electron-mock-ipc
README
# ElectronMockIPC
[![Test](https://github.com/h3poteto/electron-mock-ipc/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/h3poteto/electron-mock-ipc/actions/workflows/test.yml)
[![npm](https://img.shields.io/npm/v/electron-mock-ipc.svg)](https://www.npmjs.com/package/electron-mock-ipc)
[![GitHub release](https://img.shields.io/github/release/h3poteto/electron-mock-ipc.svg)](https://github.com/h3poteto/electron-mock-ipc/releases)
[![npm](https://img.shields.io/npm/dm/electron-mock-ipc)](https://www.npmjs.com/package/electron-mock-ipc)
[![NPM](https://img.shields.io/npm/l/electron-mock-ipc)](/LICENSE.txt)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:
```typescript
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`.```json
"jest": {
"moduleNameMapper": {
"^electron$": "/spec/mock/electron-mock.ts"
}
}
```After that, all ipc objects are mocked, so you can write tests as below.
```typescript
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.```javascript
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](https://stackoverflow.com/questions/52236641/electron-ipc-and-nodeintegration).
And write test.
```typescript
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](example).## License
The software is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).