Mocking framework for Laravel Echo
npm install mock-echomock-echo
=============
[![Travis][build-badge]][build] [![npm package][npm-badge]][npm]
[build-badge]: https://img.shields.io/travis/alexxiyang/mock-echo/master.svg?style=flat-square
[build]: https://travis-ci.org/alexxiyang/mock-echo
[npm-badge]: https://img.shields.io/npm/v/mock-echo.svg?style=flat-square
[npm]: https://www.npmjs.org/package/mock-echo
Mocking framework for Laravel Echo
npm i mock-echo
Import mock-echo import MockEcho from 'mock-echo'
Replace global object Echo with new MockEcho() before every unit test
``javascript
let mockEcho
beforeEach(() => {
mockEcho = new MockEcho()
global.Echo = mockEcho
})
`
Remember to delete global object Echo after every unit test`javascript`
afterEach(() => {
delete global.Echo
})
You can use channelExist, privateChannelExist or presenceChannelExist to determine whether channel has been listened:
* channelExist: channelprivateChannelExist
* : private channelpresenceChannelExist
* : presence channel
Example:
`javascript`
expect(mockEcho.channelExist('news')).toBe(true)
expect(mockEcho.privateChannelExist('meeting')).toBe(true)
expect(mockEcho.presenceChannelExist('chat')).toBe(true)
> All examples are using expect as assertion library
You can use getChannel, getPrivateChannel, getPresenceChannel to get mock channel object
* getChannel: channelgetPrivateChannel
* : private channelgetPresenceChannel
* : presence channel
Mock channel object has functions eventExist, broadcast, etc.
Example:
`javascript`
expect(mockEcho.getChannel('news').eventExist('NewsMessage')).toBe(true)
You can use getChannel(channelName).eventExist, getPrivateChannel(channelName).eventExist or getPresenceChannel(channelName).eventExist to determine whether event has been listened:
* getChannel(channelName).eventExist: channelgetPrivateChannel(channelName).eventExist
* : private channelgetPresenceChannel(channelName).eventExist
* : presence channel
Example:
`javascript`
expect(mockEcho.getChannel('news').eventExist('NewsMessage')).toBe(true)
expect(mockEcho.getPrivateChannel('meeting').eventExist('MeetingMessage')).toBe(true)
expect(mockEcho.getPresenceChannel('chat').eventExist('ChatMessage')).toBe(true)
You can use broadcast to broadcast an event.
> Note: If you are using vue-test-utils, call $nextTick before assertion.
Example:
`javascript`
mockEcho.getChannel('news').broadcast('NewsMessage', { message: 'Hello World' })
wrapper.vm.$nextTick(() => {
expect(wrapper.find('.message').text()).toBe('It said Hello World')
done()
})
You can use iJoin, userJoin, userLeave to trigger presence channel actions:
* iJoin: trigger here listeneruserJoin
* : trigger joining listner. It will return subId after calling userJoin. You can use this subId to get this user away from this channel.userLeave
* : trigger leaving listner. Use subId which got from userJoin to get this user away from this channel.
> Note: If you are using vue-test-utils, call $nextTick before assertion.
Example:
`javascript
mockEcho.getPresenceChannel('chat').iJoin({id: 1, name: 'Alex'})
wrapper.vm.$nextTick(() => {
expect(wrapper.find('.here-message').text()).toBe('There are 1 users')
done()
})
// You will need paulSubId to get this user away from this channel
let paulSubId = mockEcho.getPresenceChannel('chat').userJoin({id: 2, name: 'Paul'})
wrapper.vm.$nextTick(() => {
expect(wrapper.find('.join-message').text()).toBe('Paul joined')
done()
})
mockEcho.getPresenceChannel('chat').userLeave(paulSubId)
wrapper.vm.$nextTick(() => {
expect(wrapper.find('.leave-message').text()).toBe('Paul leaved')
done()
})
`
You can use whisper to send user event. Only private channel object and presence channel object have whisper.
> Note: If you are using vue-test-utils, call $nextTick before assertion.
Example:
`javascript${username} is clicking the button
// private channel
mockEcho.getPrivateChannel('meeting').whisper('meetingClicking', { username: username })
wrapper.vm.$nextTick(() => {
expect(wrapper.find('.whisper-message').text()).toBe()
done()
})
// presence channel
mockEcho.getPresenceChannel('chat').whisper('chatClicking', { username: username })
wrapper.vm.$nextTick(() => {
expect(wrapper.find('.whisper-message').text()).toBe(${username} is clicking the button)``
done()
})
Please create the issue
可以用中文