| 1 | import { createDraftSafeSelector, createSelector } from '@reduxjs/toolkit'
|
|---|
| 2 | import { produce } from 'immer'
|
|---|
| 3 |
|
|---|
| 4 | type State = { value: number }
|
|---|
| 5 | const selectSelf = (state: State) => state
|
|---|
| 6 |
|
|---|
| 7 | test('handles normal values correctly', () => {
|
|---|
| 8 | const unsafeSelector = createSelector(selectSelf, (x) => x.value)
|
|---|
| 9 | const draftSafeSelector = createDraftSafeSelector(selectSelf, (x) => x.value)
|
|---|
| 10 |
|
|---|
| 11 | let state = { value: 1 }
|
|---|
| 12 | expect(unsafeSelector(state)).toBe(1)
|
|---|
| 13 | expect(draftSafeSelector(state)).toBe(1)
|
|---|
| 14 | expect(draftSafeSelector).toHaveProperty('resultFunc')
|
|---|
| 15 | expect(draftSafeSelector).toHaveProperty('memoizedResultFunc')
|
|---|
| 16 | expect(draftSafeSelector).toHaveProperty('lastResult')
|
|---|
| 17 | expect(draftSafeSelector).toHaveProperty('dependencies')
|
|---|
| 18 | expect(draftSafeSelector).toHaveProperty('recomputations')
|
|---|
| 19 | expect(draftSafeSelector).toHaveProperty('resetRecomputations')
|
|---|
| 20 | expect(draftSafeSelector).toHaveProperty('clearCache')
|
|---|
| 21 |
|
|---|
| 22 | state = { value: 2 }
|
|---|
| 23 | expect(unsafeSelector(state)).toBe(2)
|
|---|
| 24 | expect(draftSafeSelector(state)).toBe(2)
|
|---|
| 25 | })
|
|---|
| 26 |
|
|---|
| 27 | test('handles drafts correctly', () => {
|
|---|
| 28 | const unsafeSelector = createSelector(selectSelf, (state) => state.value)
|
|---|
| 29 | const draftSafeSelector = createDraftSafeSelector(
|
|---|
| 30 | selectSelf,
|
|---|
| 31 | (state) => state.value,
|
|---|
| 32 | )
|
|---|
| 33 |
|
|---|
| 34 | produce({ value: 1 }, (state) => {
|
|---|
| 35 | expect(unsafeSelector(state)).toBe(1)
|
|---|
| 36 | expect(draftSafeSelector(state)).toBe(1)
|
|---|
| 37 |
|
|---|
| 38 | state.value = 2
|
|---|
| 39 |
|
|---|
| 40 | expect(unsafeSelector(state)).toBe(1)
|
|---|
| 41 | expect(draftSafeSelector(state)).toBe(2)
|
|---|
| 42 | })
|
|---|
| 43 | })
|
|---|