persistence.spec.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import Alpine from 'alpinejs'
  2. import Spruce from '../dist/spruce'
  3. import { waitFor } from '@testing-library/dom'
  4. beforeEach(() => {
  5. Spruce.subscribers = []
  6. })
  7. beforeAll(() => {
  8. window.Spruce = Spruce
  9. window.Alpine = Alpine
  10. window.localStorage = {
  11. storage: {},
  12. getItem(key) {
  13. return this.storage[key]
  14. },
  15. setItem(key, value) {
  16. this.storage[key] = value
  17. }
  18. }
  19. })
  20. test('persisted stores are correctly persisted', async () => {
  21. document.body.innerHTML = `
  22. <div x-data>
  23. <input type="text" x-model="$store.persisted.foo">
  24. </div>
  25. `
  26. Spruce.store('persisted', {
  27. foo: 'bar',
  28. }, true)
  29. await Spruce.start()
  30. Alpine.start()
  31. expect(document.querySelector('input').value).toEqual('bar')
  32. document.querySelector('input').value = 'car'
  33. document.querySelector('input').dispatchEvent(new Event('input'))
  34. await waitFor(() => {
  35. expect(document.querySelector('input').value).toEqual('car')
  36. expect(Spruce.retrieveFromLocalStorage('persisted').foo).toEqual('car')
  37. })
  38. })