From 4c40900910a3915f1f91146e01088555fd2d01d4 Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Sat, 8 Sep 2018 15:31:04 +0800 Subject: [PATCH] Move emitting to each fetcher --- resources/assets/src/js/net.js | 14 ++++++++++++-- resources/assets/tests/js/net.test.js | 19 ++++++++++++++++--- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/resources/assets/src/js/net.js b/resources/assets/src/js/net.js index e8a36354..09957420 100644 --- a/resources/assets/src/js/net.js +++ b/resources/assets/src/js/net.js @@ -24,8 +24,6 @@ function retrieveToken() { export async function walkFetch(request) { request.headers.set('X-CSRF-TOKEN', retrieveToken()); - emit('beforeFetch', request); - try { const response = await fetch(request); if (response.ok) { @@ -39,12 +37,24 @@ export async function walkFetch(request) { } export async function get(url, params = empty) { + emit('beforeFetch', { + method: 'GET', + url, + data: params + }); + const qs = queryStringify(params); return walkFetch(new Request(`${blessing.base_url}${url}${qs && '?' + qs}`, init)); } export async function post(url, data = empty) { + emit('beforeFetch', { + method: 'POST', + url, + data + }); + return walkFetch(new Request(`${blessing.base_url}${url}`, { body: JSON.stringify(data), method: 'POST', diff --git a/resources/assets/tests/js/net.test.js b/resources/assets/tests/js/net.test.js index cf459ce0..32ecab2e 100644 --- a/resources/assets/tests/js/net.test.js +++ b/resources/assets/tests/js/net.test.js @@ -17,7 +17,15 @@ test('the GET method', async () => { json }); + const stub = jest.fn(); + on('beforeFetch', stub); + await net.get('/abc', { a: 'b' }); + expect(stub).toBeCalledWith({ + method: 'GET', + url: '/abc', + data: { a: 'b' } + }); expect(window.fetch.mock.calls[0][0].url).toBe('/abc?a=b'); expect(json).toBeCalled(); @@ -36,7 +44,15 @@ test('the POST method', async () => { meta.content = 'token'; document.head.appendChild(meta); + const stub = jest.fn(); + on('beforeFetch', stub); + await net.post('/abc', { a: 'b' }); + expect(stub).toBeCalledWith({ + method: 'POST', + url: '/abc', + data: { a: 'b' } + }); const request = window.fetch.mock.calls[0][0]; expect(request.url).toBe('/abc'); expect(request.method).toBe('POST'); @@ -60,13 +76,10 @@ test('low level fetch', async () => { json }); - const stub = jest.fn(); - on('beforeFetch', stub); const request = { headers: new Map() }; await net.walkFetch(request); expect(showAjaxError.mock.calls[0][0]).toBeInstanceOf(Error); - expect(stub).toBeCalledWith(request); await net.walkFetch(request); expect(showAjaxError).toBeCalledWith('404');