|
1 | 1 | import { describe, expect, it } from 'vitest' |
2 | 2 | import { createLoader } from './loader' |
3 | | -import { parseAsInteger } from './parsers' |
| 3 | +import { createParser, parseAsInteger } from './parsers' |
4 | 4 |
|
5 | 5 | describe('loader', () => { |
6 | 6 | describe('sync', () => { |
@@ -89,6 +89,38 @@ describe('loader', () => { |
89 | 89 | urlKey: 1 |
90 | 90 | }) |
91 | 91 | }) |
| 92 | + it('supports default values', () => { |
| 93 | + const load = createLoader({ |
| 94 | + a: parseAsInteger, |
| 95 | + b: parseAsInteger.withDefault(2) |
| 96 | + }) |
| 97 | + const result = load('') |
| 98 | + expect(result).toEqual({ |
| 99 | + a: null, |
| 100 | + b: 2 |
| 101 | + }) |
| 102 | + }) |
| 103 | + it('throws errors in strict mode when the parser returns null on non-empty queries', () => { |
| 104 | + const load = createLoader({ |
| 105 | + test: parseAsInteger |
| 106 | + }) |
| 107 | + expect(() => load('?test=not-a-number', { strict: true })).toThrow( |
| 108 | + '[nuqs] Failed to parse query `not-a-number` for key `test` (got null)' |
| 109 | + ) |
| 110 | + }) |
| 111 | + it('throws errors in strict mode when the parser throws an error', () => { |
| 112 | + const load = createLoader({ |
| 113 | + test: createParser({ |
| 114 | + parse: (): any => { |
| 115 | + throw new Error('Boom') |
| 116 | + }, |
| 117 | + serialize: () => '' |
| 118 | + }) |
| 119 | + }) |
| 120 | + expect(() => load('?test=will-throw', { strict: true })).toThrow( |
| 121 | + '[nuqs] Error while parsing query `will-throw` for key `test`: Error: Boom' |
| 122 | + ) |
| 123 | + }) |
92 | 124 | }) |
93 | 125 |
|
94 | 126 | describe('async', () => { |
|
0 commit comments