Skip to content

Commit fbdf8d5

Browse files
committed
test: Check referential equality when defaults change
1 parent ee5ac41 commit fbdf8d5

File tree

1 file changed

+37
-19
lines changed

1 file changed

+37
-19
lines changed

packages/nuqs/src/useQueryStates.test.tsx

+37-19
Original file line numberDiff line numberDiff line change
@@ -10,31 +10,36 @@ function withSearchParams(
1010
searchParams?: string | URLSearchParams | Record<string, string>
1111
) {
1212
return (props: { children: ReactNode }) => (
13-
<NuqsTestingAdapter searchParams={searchParams} {...props} />
13+
<NuqsTestingAdapter
14+
searchParams={searchParams}
15+
{...props}
16+
/>
1417
)
1518
}
1619

17-
describe('useQueryStates', () => {
18-
const defaults = {
19-
str: 'foo',
20-
obj: { initial: 'state' },
21-
arr: [
22-
{
23-
initial: 'state'
24-
}
25-
]
26-
}
20+
const defaults = {
21+
str: 'foo',
22+
obj: { initial: 'state' },
23+
arr: [
24+
{
25+
initial: 'state'
26+
}
27+
]
28+
}
2729

28-
const hook = () => {
29-
return useQueryStates({
30-
str: parseAsString.withDefault(defaults.str),
31-
obj: parseAsJson<any>(x => x).withDefault(defaults.obj),
32-
arr: parseAsArrayOf(parseAsJson<any>(x => x)).withDefault(defaults.arr)
33-
})
34-
}
30+
const hook = ({ defaultValue } = { defaultValue: defaults.str }) => {
31+
return useQueryStates({
32+
str: parseAsString.withDefault(defaultValue),
33+
obj: parseAsJson<any>(x => x).withDefault(defaults.obj),
34+
arr: parseAsArrayOf(parseAsJson<any>(x => x)).withDefault(defaults.arr)
35+
})
36+
}
3537

38+
describe('useQueryStates', () => {
3639
it('should have referential equality on default values', () => {
37-
const { result } = renderHook(hook, { wrapper: NuqsTestingAdapter })
40+
const { result } = renderHook(hook, {
41+
wrapper: NuqsTestingAdapter
42+
})
3843
const [state] = result.current
3944
expect(state.str).toBe(defaults.str)
4045
expect(state.obj).toBe(defaults.obj)
@@ -77,4 +82,17 @@ describe('useQueryStates', () => {
7782
expect(obj).toBe(initialObj)
7883
expect(arr).toBe(initialArr)
7984
})
85+
86+
it('should keep referential equality when default changes for another key', () => {
87+
const { result, rerender } = renderHook(hook, {
88+
wrapper: withSearchParams()
89+
})
90+
expect(result.current[0].str).toBe('foo')
91+
rerender({ defaultValue: 'b' })
92+
const [state] = result.current
93+
expect(state.str).toBe('b')
94+
expect(state.obj).toBe(defaults.obj)
95+
expect(state.arr).toBe(defaults.arr)
96+
expect(state.arr[0]).toBe(defaults.arr[0])
97+
})
8098
})

0 commit comments

Comments
 (0)