koel/resources/assets/js/utils/eventBus.spec.ts
2022-05-14 17:37:25 +02:00

57 lines
1.4 KiB
TypeScript

import UnitTestCase from '@/__tests__/UnitTestCase'
import { expect, it, vi } from 'vitest'
import { eventBus } from './eventBus'
new class extends UnitTestCase {
protected beforeEach () {
super.beforeEach(() => (eventBus.all = new Map()))
}
protected test () {
it('listens on a single event', () => {
const mock = vi.fn()
eventBus.on('KOEL_READY', mock)
eventBus.emit('KOEL_READY')
expect(mock).toHaveBeenCalledOnce()
})
it('listens with parameters', () => {
const mock = vi.fn()
eventBus.on('KOEL_READY', mock)
eventBus.emit('KOEL_READY', 'foo', 'bar')
expect(mock).toHaveBeenNthCalledWith(1, 'foo', 'bar')
})
it('registers multiple listeners at once', () => {
const mock1 = vi.fn()
const mock2 = vi.fn()
eventBus.on({
KOEL_READY: mock1,
MODAL_SHOW_ABOUT_KOEL: mock2
})
eventBus.emit('KOEL_READY')
expect(mock1).toHaveBeenCalledOnce()
eventBus.emit('MODAL_SHOW_ABOUT_KOEL')
expect(mock2).toHaveBeenCalledOnce()
})
it('queue up listeners on same event', () => {
const mock1 = vi.fn()
const mock2 = vi.fn()
eventBus.on('KOEL_READY', mock1)
eventBus.on('KOEL_READY', mock2)
eventBus.emit('KOEL_READY')
expect(mock1).toHaveBeenCalledOnce()
expect(mock2).toHaveBeenCalledOnce()
})
}
}