|
1 | 1 | // TODO: Add test for React Redux connect function
|
2 | 2 |
|
3 | 3 | import { createSelectorCreator, lruMemoize } from 'reselect'
|
4 |
| -import { vi } from 'vitest' |
| 4 | +import type { RootState } from './testUtils' |
| 5 | +import { localTest, toggleCompleted } from './testUtils' |
5 | 6 |
|
6 | 7 | const createSelector = createSelectorCreator({
|
7 | 8 | memoize: lruMemoize,
|
@@ -414,4 +415,41 @@ describe(lruMemoize, () => {
|
414 | 415 | // @ts-expect-error
|
415 | 416 | expect(selector.resultFunc.clearCache).toBeUndefined()
|
416 | 417 | })
|
| 418 | + |
| 419 | + localTest( |
| 420 | + 'maxSize should default to 1 when set to a number that is less than 1', |
| 421 | + ({ state, store }) => { |
| 422 | + const createSelectorLru = createSelectorCreator({ |
| 423 | + memoize: lruMemoize, |
| 424 | + argsMemoize: lruMemoize, |
| 425 | + memoizeOptions: { maxSize: 0 }, |
| 426 | + argsMemoizeOptions: { maxSize: 0 } |
| 427 | + }).withTypes<RootState>() |
| 428 | + |
| 429 | + const selectTodoIds = createSelectorLru([state => state.todos], todos => |
| 430 | + todos.map(({ id }) => id) |
| 431 | + ) |
| 432 | + |
| 433 | + expect(selectTodoIds(store.getState())).toBe( |
| 434 | + selectTodoIds(store.getState()) |
| 435 | + ) |
| 436 | + |
| 437 | + expect(selectTodoIds.recomputations()).toBe(1) |
| 438 | + |
| 439 | + store.dispatch(toggleCompleted(0)) |
| 440 | + |
| 441 | + expect(selectTodoIds(store.getState())).toBe( |
| 442 | + selectTodoIds(store.getState()) |
| 443 | + ) |
| 444 | + |
| 445 | + expect(selectTodoIds.recomputations()).toBe(2) |
| 446 | + |
| 447 | + const selectTodoIdsLru = lruMemoize( |
| 448 | + (state: RootState) => state.todos.map(({ id }) => id), |
| 449 | + { maxSize: -2 } |
| 450 | + ) |
| 451 | + |
| 452 | + expect(selectTodoIdsLru(state)).toBe(selectTodoIdsLru(state)) |
| 453 | + } |
| 454 | + ) |
417 | 455 | })
|
0 commit comments