mock-echo
Version:
Mocking framework for Laravel Echo
161 lines (117 loc) • 4.82 kB
Markdown
mock-echo
=============
[![Travis][build-badge]][build] [![npm package][npm-badge]][npm]
[//img.shields.io/travis/alexxiyang/mock-echo/master.svg?style=flat-square
[ ]: https://travis-ci.org/alexxiyang/mock-echo
[ ]: https://img.shields.io/npm/v/mock-echo.svg?style=flat-square
[ ]: https://www.npmjs.org/package/mock-echo
Mocking framework for [Laravel](https://laravel.com/) [Echo](https://laravel.com/docs/5.7/broadcasting#installing-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`: channel
* `privateChannelExist`: private channel
* `presenceChannelExist`: 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
## Get mock channel object
You can use `getChannel`, `getPrivateChannel`, `getPresenceChannel` to get mock channel object
* `getChannel`: channel
* `getPrivateChannel`: private channel
* `getPresenceChannel`: presence channel
Mock channel object has functions `eventExist`, `broadcast`, etc.
Example:
```javascript
expect(mockEcho.getChannel('news').eventExist('NewsMessage')).toBe(true)
```
## Determine whether event has been listened
You can use `getChannel(channelName).eventExist`, `getPrivateChannel(channelName).eventExist` or `getPresenceChannel(channelName).eventExist` to determine whether event has been listened:
* `getChannel(channelName).eventExist`: channel
* `getPrivateChannel(channelName).eventExist`: private channel
* `getPresenceChannel(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)
```
## Broadcast event
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` listener
* `userJoin`: 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
// private channel
mockEcho.getPrivateChannel('meeting').whisper('meetingClicking', { username: username })
wrapper.vm.$nextTick(() => {
expect(wrapper.find('.whisper-message').text()).toBe(`${username} is clicking the button`)
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
可以用中文
]: https: