reset.spec.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import Spruce from '../dist/spruce'
  2. import Alpine from 'alpinejs'
  3. import { waitFor } from '@testing-library/dom'
  4. beforeEach(() => {
  5. Spruce.stores = {}
  6. })
  7. beforeAll(() => {
  8. window.Spruce = Spruce
  9. })
  10. test('.reset() > will overwrite existing properties', () => {
  11. Spruce.store('example', {
  12. foo: 'bar'
  13. })
  14. expect(Spruce.stores.example.foo).toEqual('bar')
  15. Spruce.reset('example', {
  16. foo: 'bob'
  17. })
  18. expect(Spruce.stores.example.foo).toEqual('bob')
  19. })
  20. test('.reset() > will make nested objects reactive', async () => {
  21. document.body.innerHTML = `
  22. <div x-data x-subscribe>
  23. <span x-text="$store.example.foo.bob"></span>
  24. </div>
  25. `
  26. Spruce.store('example', {
  27. foo: {
  28. bob: 'bar'
  29. }
  30. })
  31. expect(Spruce.stores.example.foo.bob).toEqual('bar')
  32. await Spruce.start()
  33. Alpine.start()
  34. expect(document.querySelector('span').innerText).toEqual('bar')
  35. Spruce.reset('example', {
  36. foo: {
  37. bob: 'car'
  38. }
  39. })
  40. await waitFor(() => {
  41. expect(Spruce.stores.example.foo.bob).toEqual('car')
  42. expect(document.querySelector('span').innerText).toEqual('car')
  43. })
  44. })