value.spec.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { value } from '../src/value'
  2. import { effect, observable } from '../src/index'
  3. describe('observer/value', () => {
  4. it('should hold a value', () => {
  5. const a = value(1)
  6. expect(a.value).toBe(1)
  7. a.value = 2
  8. expect(a.value).toBe(2)
  9. })
  10. it('should be reactive', () => {
  11. const a = value(1)
  12. let dummy
  13. effect(() => {
  14. dummy = a.value
  15. })
  16. expect(dummy).toBe(1)
  17. a.value = 2
  18. expect(dummy).toBe(2)
  19. })
  20. it('should make nested properties reactive', () => {
  21. const a = value({
  22. count: 1
  23. })
  24. let dummy
  25. effect(() => {
  26. dummy = a.value.count
  27. })
  28. expect(dummy).toBe(1)
  29. a.value.count = 2
  30. expect(dummy).toBe(2)
  31. })
  32. it('should work like a normal property when nested in an observable', () => {
  33. const a = value(1)
  34. const obj = observable({
  35. a,
  36. b: {
  37. c: a,
  38. d: [a]
  39. }
  40. })
  41. let dummy1
  42. let dummy2
  43. let dummy3
  44. effect(() => {
  45. dummy1 = obj.a
  46. dummy2 = obj.b.c
  47. dummy3 = obj.b.d[0]
  48. })
  49. expect(dummy1).toBe(1)
  50. expect(dummy2).toBe(1)
  51. expect(dummy3).toBe(1)
  52. a.value++
  53. expect(dummy1).toBe(2)
  54. expect(dummy2).toBe(2)
  55. expect(dummy3).toBe(2)
  56. obj.a++
  57. expect(dummy1).toBe(3)
  58. expect(dummy2).toBe(3)
  59. expect(dummy3).toBe(3)
  60. })
  61. })