bus.spec.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import Spruce from '../dist/spruce'
  2. import Alpine from 'alpinejs'
  3. import { waitFor } from '@testing-library/dom'
  4. beforeEach(() => {
  5. Spruce.subscribers = []
  6. })
  7. beforeAll(() => {
  8. window.Spruce = Spruce
  9. })
  10. /* Spruce.on() */
  11. test('.on() > can be used to register event listeners', () => {
  12. Spruce.on('example', (event) => {})
  13. expect(Spruce.events.events.hasOwnProperty('example')).toBeTruthy()
  14. })
  15. test('.on() > listener can access store', () => {
  16. Spruce.store('foo', {
  17. bar: 'bob'
  18. })
  19. let fixture = undefined;
  20. Spruce.on('example', (detail) => {
  21. fixture = detail
  22. })
  23. Spruce.emit('example')
  24. expect(fixture.store).toEqual(Spruce.stores)
  25. })
  26. /* Spruce.emit() */
  27. test('.emit() > will run registered listeners', () => {
  28. let fixture = 0;
  29. Spruce.on('example', (detail) => {
  30. fixture =+ detail.inc
  31. })
  32. Spruce.emit('example', { inc: 10 })
  33. expect(fixture).toEqual(10)
  34. })
  35. test('.emit() > will dispatch browser event to window with spruce: prefix', async () => {
  36. document.body.innerHTML = `
  37. <div x-data="{ foo: 'bar' }" @spruce:example.window="foo = $event.detail.foo">
  38. <span x-text="foo"></span>
  39. </div>
  40. `
  41. Alpine.start()
  42. expect(document.querySelector('span').innerText).toEqual('bar')
  43. Spruce.emit('example', { foo: 'car' })
  44. await waitFor(() => {
  45. expect(document.querySelector('span').innerText).toEqual('car')
  46. })
  47. })
  48. test('.watch() > can listen for changes to property', async () => {
  49. let fixture = undefined
  50. let oldFixture = undefined
  51. Spruce.store('example', {
  52. cool: 'stuff'
  53. })
  54. Spruce.watch('example.cool', (previous, value) => {
  55. oldFixture = previous
  56. fixture = value
  57. })
  58. await Spruce.start()
  59. expect(fixture).toBeUndefined()
  60. Spruce.stores.example.cool = 'amazing'
  61. expect(fixture).toEqual('amazing')
  62. expect(oldFixture).toEqual('stuff')
  63. })
  64. test('.off() > can unregister listener', () => {
  65. let fixture = undefined;
  66. const callback = () => {
  67. fixture = 0
  68. }
  69. Spruce.on('fixture-event', callback)
  70. Spruce.off('fixture-event', callback)
  71. Spruce.emit('fixture-event')
  72. expect(fixture).toBeUndefined()
  73. })
  74. test('.off() > returned when calling .on()', () => {
  75. let fixture = undefined;
  76. let off = Spruce.on('fixture-event', () => {
  77. fixture = 0
  78. })
  79. off()
  80. Spruce.emit('fixture-event')
  81. expect(fixture).toBeUndefined()
  82. })