ref.spec.ts 1.4 KB

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