-
-
Save sliim35/15a0467a2d0e8d0029b58550d57863c7 to your computer and use it in GitHub Desktop.
Revisions
-
cowboy revised this gist
Nov 8, 2017 . 2 changed files with 36 additions and 24 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,10 +1,15 @@ import axios from 'axios' let mockingEnabled = false const mocks = {} export function addMock(url, data) { mocks[url] = data } export function enableMocking(state) { mockingEnabled = state } const isUrlMocked = url => url in mocks @@ -52,22 +57,4 @@ axios.interceptors.response.use(response => response, error => { return getMockResponse(error) } return Promise.reject(error) }) This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,25 @@ import axios from 'axios' import {addMock, enableMocking} from './mock-axios' addMock('https://dog.ceo/api/breeds/list/all', {data: {mock: 'dogs'}}) addMock('https://dog.ceo/404-page', {status: 404, message: 'whoops'}) enableMocking(true) // mocked let result = await axios.get('https://dog.ceo/api/breeds/list/all') console.log(1, result) try { result = await axios.get('https://dog.ceo/404-page') } catch (err) { console.log(2, err) } // not mocked result = await axios.get('https://dog.ceo/api/breeds/list/all?foo=1') console.log(3, result) try { result = await axios.get('https://dog.ceo/unhandled-404') } catch (err) { console.log(4, err) } -
cowboy created this gist
Nov 8, 2017 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,73 @@ const axios = require('axios') const mockingEnabled = true const mocks = { 'https://dog.ceo/api/breeds/list/all': {data: {mock: 'dogs'}}, 'https://dog.ceo/404-page': {status: 404, message: 'whoops'} } const isUrlMocked = url => url in mocks const getMockError = config => { const mockError = new Error() mockError.mockData = mocks[config.url] mockError.config = config return Promise.reject(mockError) } const isMockError = error => Boolean(error.mockData) const getMockResponse = mockError => { const {mockData, config} = mockError // Handle mocked error (any non-2xx status code) if (mockData.status && String(mockData.status)[0] !== '2') { const err = new Error(mockData.message || 'mock error') err.code = mockData.status return Promise.reject(err) } // Handle mocked success return Promise.resolve(Object.assign({ data: {}, status: 200, statusText: 'OK', headers: {}, config, isMock: true }, mockData)) } // Add a request interceptor axios.interceptors.request.use(config => { if (mockingEnabled && isUrlMocked(config.url)) { console.log('axios mocking ' + config.url) return getMockError(config) } return config }, error => Promise.reject(error)) // Add a response interceptor axios.interceptors.response.use(response => response, error => { if (isMockError(error)) { return getMockResponse(error) } return Promise.reject(error) }) // mocked let result = await axios.get('https://dog.ceo/api/breeds/list/all') console.log(1, result) try { result = await axios.get('https://dog.ceo/404-page') } catch (err) { console.log(2, err) } // not mocked result = await axios.get('https://dog.ceo/api/breeds/list/all?foo=1') console.log(3, result) try { result = await axios.get('https://dog.ceo/unhandled-404') } catch (err) { console.log(4, err) }