DefaultStore.test.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. const DefaultStore = require('./DefaultStore')
  2. describe('DefaultStore', () => {
  3. it('can be created with or without new', () => {
  4. let store = DefaultStore()
  5. expect(typeof store).toBe('object')
  6. store = new DefaultStore()
  7. expect(typeof store).toBe('object')
  8. })
  9. it('merges in state using `setState`', () => {
  10. const store = DefaultStore()
  11. expect(store.getState()).toEqual({})
  12. store.setState({
  13. a: 1,
  14. b: 2
  15. })
  16. expect(store.getState()).toEqual({ a: 1, b: 2 })
  17. store.setState({ b: 3 })
  18. expect(store.getState()).toEqual({ a: 1, b: 3 })
  19. })
  20. it('notifies subscriptions when state changes', () => {
  21. let expected = []
  22. let calls = 0
  23. function listener (prevState, nextState, patch) {
  24. calls++
  25. expect([ prevState, nextState, patch ]).toEqual(expected)
  26. }
  27. const store = DefaultStore()
  28. store.subscribe(listener)
  29. expected = [{}, { a: 1, b: 2 }, { a: 1, b: 2 }]
  30. store.setState({
  31. a: 1,
  32. b: 2
  33. })
  34. expected = [{ a: 1, b: 2 }, { a: 1, b: 3 }, { b: 3 }]
  35. store.setState({ b: 3 })
  36. expect(calls).toBe(2)
  37. })
  38. })