Skip to content

Commit 6fa6bce

Browse files
committed
Normalize retry option defaults when undefined
1 parent 4fd8c28 commit 6fa6bce

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

source/utils/normalize.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,12 @@ export const normalizeRetryOptions = (retry: number | RetryOptions = {}): Intern
4141
throw new Error('retry.statusCodes must be an array');
4242
}
4343

44+
const normalizedRetry = Object.fromEntries(
45+
Object.entries(retry).filter(([, value]) => value !== undefined),
46+
) as RetryOptions;
47+
4448
return {
4549
...defaultRetryOptions,
46-
...retry,
50+
...normalizedRetry,
4751
};
4852
};

test/retry.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,27 @@ test('throws when retry.statusCodes is not an array', async t => {
584584
await server.close();
585585
});
586586

587+
test('retry options ignore undefined overrides and keep defaults', async t => {
588+
let requestCount = 0;
589+
590+
const server = await createHttpTestServer();
591+
server.get('/', (_request, response) => {
592+
requestCount++;
593+
response.sendStatus(500);
594+
});
595+
596+
await t.throwsAsync(ky(server.url, {
597+
retry: {
598+
limit: undefined,
599+
},
600+
}).text(), {message: /Internal Server Error/});
601+
602+
// Default limit is 2, so request should be attempted 3 times
603+
t.is(requestCount, defaultRetryCount + 1);
604+
605+
await server.close();
606+
});
607+
587608
test('respect maximum backoffLimit', async t => {
588609
const retryCount = 4;
589610
let requestCount = 0;

0 commit comments

Comments
 (0)