diff --git a/lib/index.js b/lib/index.js index 6028bc0..2f12e8e 100644 --- a/lib/index.js +++ b/lib/index.js @@ -10,7 +10,7 @@ const makeFetchHappen = (url, opts) => { return fetch(request, options) } -makeFetchHappen.defaults = (defaultUrl, defaultOptions = {}) => { +makeFetchHappen.defaults = (defaultUrl, defaultOptions = {}, wrappedFetch = makeFetchHappen) => { if (typeof defaultUrl === 'object') { defaultOptions = defaultUrl defaultUrl = null @@ -26,10 +26,11 @@ makeFetchHappen.defaults = (defaultUrl, defaultOptions = {}) => { ...options.headers, }, } - return makeFetchHappen(finalUrl, finalOptions) + return wrappedFetch(finalUrl, finalOptions) } - defaultedFetch.defaults = makeFetchHappen.defaults + defaultedFetch.defaults = (defaultUrl1, defaultOptions1 = {}) => + makeFetchHappen.defaults(defaultUrl1, defaultOptions1, defaultedFetch) return defaultedFetch } diff --git a/test/defaults.js b/test/defaults.js index db76438..9353a2d 100644 --- a/test/defaults.js +++ b/test/defaults.js @@ -21,7 +21,7 @@ t.test('can set default url', async (t) => { t.test('allows default headers', async (t) => { const srv = nock('http://localhost', { - reqHeaders: { + reqheaders: { 'x-foo': 'bar', 'x-bar': 'baz', }, @@ -40,3 +40,27 @@ t.test('allows default headers', async (t) => { t.same(buf, Buffer.from('success'), 'got body') t.ok(srv.isDone()) }) + +t.test('layering default headers works', async (t) => { + const srv = nock('http://localhost', { + reqheaders: { + 'x-foo': 'bar', + 'x-bar': 'baz', + 'x-another': 'yep', + }, + }) + .get('/test') + .reply(200, 'success') + + const defaultedFetch1 = fetch.defaults({ headers: { 'x-foo': 'bar' } }) + const defaultedFetch2 = defaultedFetch1.defaults({ headers: { 'x-bar': 'baz' } }) + const res = await defaultedFetch2('http://localhost/test', { + headers: { + 'x-another': 'yep', + }, + }) + t.equal(res.status, 200, 'got success') + const buf = await res.buffer() + t.same(buf, Buffer.from('success'), 'got body') + t.ok(srv.isDone()) +})