From 19dee496e5998ad8e171394d5fa54484db2dab11 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Tue, 17 Sep 2019 02:19:06 +0200 Subject: [PATCH] test coverage --- src/Network.js | 2 +- src/Network.test.js | 26 +++++++++++++++++++++----- src/index.test.js | 22 ++++++++++++++++------ src/rpc.js | 34 +++++++++++++++++----------------- 4 files changed, 55 insertions(+), 29 deletions(-) diff --git a/src/Network.js b/src/Network.js index d172398..b64eba9 100644 --- a/src/Network.js +++ b/src/Network.js @@ -52,7 +52,7 @@ export default function Network({ network }) { return () => { clearInterval(timer) } - }, [network.url]) + }, [network]) const isOnline = status === 'Online' diff --git a/src/Network.test.js b/src/Network.test.js index 8ae4161..6bcdef5 100644 --- a/src/Network.test.js +++ b/src/Network.test.js @@ -1,5 +1,5 @@ import React from 'react' -import { render, waitForElement } from '@testing-library/react' +import { render, wait } from '@testing-library/react' import mockAxios from 'axios' import Network from './Network' @@ -11,6 +11,7 @@ const mockResponse = { afterEach(() => { mockAxios.reset() + jest.clearAllTimers() }) describe('Network', () => { @@ -24,11 +25,26 @@ describe('Network', () => { } it('renders without crashing', async () => { - mockAxios.post.mockResolvedValueOnce(mockResponse) - - const { container, getByTitle } = render() + mockAxios.post.mockResolvedValue(mockResponse) + const { container } = render() expect(container.firstChild).toBeInTheDocument() - await waitForElement(() => getByTitle('Current block number')) + await wait() expect(mockAxios.post).toHaveBeenCalledTimes(2) }) + + it('renders without response', async () => { + mockAxios.post.mockResolvedValue(undefined) + const { container } = render() + await wait() + expect(container.firstChild).toBeInTheDocument() + }) + + it('re-fetches after 5 sec.', async () => { + jest.useFakeTimers() + mockAxios.post.mockResolvedValue(mockResponse) + render() + jest.advanceTimersByTime(6000) + await wait() + expect(setInterval).toHaveBeenCalledTimes(1) + }) }) diff --git a/src/index.test.js b/src/index.test.js index c8b4c46..5ee6c91 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -1,12 +1,22 @@ -import { act } from '@testing-library/react' +import ReactDOM from 'react-dom' import { renderToDOM } from '.' -describe('index', () => { - it('should be able to run tests', () => { - expect(1 + 2).toEqual(3) +describe('test ReactDOM.render', () => { + const originalRender = ReactDOM.render + const originalGetElement = global.document.getElementById + + beforeEach(() => { + global.document.getElementById = () => true + ReactDOM.render = jest.fn() }) - it('renders without crashing', () => { - act(() => renderToDOM()) + afterAll(() => { + global.document.getElementById = originalGetElement + ReactDOM.render = originalRender + }) + + it('should call ReactDOM.render', () => { + renderToDOM() + expect(ReactDOM.render).toHaveBeenCalled() }) }) diff --git a/src/rpc.js b/src/rpc.js index b21754b..9643dbf 100644 --- a/src/rpc.js +++ b/src/rpc.js @@ -1,5 +1,22 @@ import axios from 'axios' +async function axiosRpcRequest(url, method) { + try { + const response = await axios.post(url, { + method, + params: [], + id: 1, + jsonrpc: '2.0' + }) + + return response + } catch (error) { + return error + } +} + +export { axiosRpcRequest } + // Measure response time and deliver as `response.duration` axios.interceptors.request.use( config => { @@ -23,20 +40,3 @@ axios.interceptors.response.use( return Promise.reject(error) } ) - -async function axiosRpcRequest(url, method) { - try { - const response = await axios.post(url, { - method, - params: [], - id: 1, - jsonrpc: '2.0' - }) - - return response - } catch (error) { - return error - } -} - -export { axiosRpcRequest }