0.1.0 • Published 4 years ago
@yagisumi/e7ipc-mock v0.1.0
@yagisumi/e7ipc-mock
Mock for handler test.
Installation
$ npm i @yagisumi/e7ipc-mock
Usage
// messages.ts
export const CHANNEL = 'app'
type MapType<T, U = keyof T> = U extends keyof T ? T[U] : never
export interface Requests {
hello: {
type: 'hello'
}
bye: {
type: 'bye'
}
}
export type Request = MapType<Requests>
export interface Responses {
ok: {
type: 'ok'
}
error: {
type: 'error'
message: string
}
}
export type Response = MapType<Responses>
export const unexpected = (): Response => {
return { type: 'error', message: 'unexpected' }
}
// handler.ts
import { Handler } from '@yagisumi/e7ipc-types'
import { Request, Response } from './messages'
export const handler: Handler<Request, Response> = async (_, req) => {
if (req.type === 'hello') {
return { type: 'ok' }
} else if (req.type === 'bye') {
return { type: 'error', message: `Don't say goodbye.` }
} else {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const unreachable: never = req
throw 'unreachable'
}
}
Test
import { Mock } from '@yagisumi/e7ipc-mock'
import { Request, Response } from '@/messages'
import { handler } from '@/handler'
describe('handler', () => {
test('request', async () => {
const mock = new Mock<Request, Response>()
mock.handle(handler)
const r1 = await mock.invoke({ type: 'hello' })
expect(r1.type).toBe('ok')
const r2 = await mock.invoke({ type: 'bye' })
expect(r2.type).toBe('error')
})
})
License
0.1.0
4 years ago