From 29eb89f20cc88e3ba436e49319140e9fafa9afda Mon Sep 17 00:00:00 2001 From: Toru Kobayashi Date: Mon, 13 Sep 2021 23:47:51 +0900 Subject: [PATCH] test: refactor config tests (#1458) --- test/use-swr-config-callbacks.test.tsx | 22 +++++------ test/use-swr-config.test.tsx | 55 +++++++++++++------------- 2 files changed, 38 insertions(+), 39 deletions(-) diff --git a/test/use-swr-config-callbacks.test.tsx b/test/use-swr-config-callbacks.test.tsx index fdbca86c4..742e2705c 100644 --- a/test/use-swr-config-callbacks.test.tsx +++ b/test/use-swr-config-callbacks.test.tsx @@ -1,26 +1,24 @@ -import { act, render, screen, fireEvent } from '@testing-library/react' +import { act, screen, fireEvent } from '@testing-library/react' import React from 'react' import useSWR from 'swr' -import { sleep, createResponse } from './utils' +import { sleep, createResponse, renderWithConfig, createKey } from './utils' describe('useSWR - config callbacks', () => { it('should trigger the onSuccess event with the latest version of the onSuccess callback', async () => { let state = null let count = 0 - + const key = createKey() function Page(props: { text: string }) { - const { data, mutate } = useSWR( - 'config callbacks - onSuccess', - () => createResponse(count++), - { onSuccess: () => (state = props.text) } - ) + const { data, mutate } = useSWR(key, () => createResponse(count++), { + onSuccess: () => (state = props.text) + }) return (
mutate()}> hello, {data}, {props.text}
) } - const { rerender } = render() + const { rerender } = renderWithConfig() // the onSuccess callback does not trigger yet, the state still null. screen.getByText('hello, , a') expect(state).toEqual(null) @@ -64,7 +62,7 @@ describe('useSWR - config callbacks', () => { ) } - const { rerender } = render() + const { rerender } = renderWithConfig() screen.getByText('hello, , a') expect(state).toEqual(null) @@ -107,7 +105,7 @@ describe('useSWR - config callbacks', () => { ) } - const { rerender } = render() + const { rerender } = renderWithConfig() screen.getByText('hello, , a') expect(state).toEqual(null) @@ -154,7 +152,7 @@ describe('useSWR - config callbacks', () => { ) } - const { rerender } = render() + const { rerender } = renderWithConfig() screen.getByText('hello, , a') expect(state).toEqual(null) diff --git a/test/use-swr-config.test.tsx b/test/use-swr-config.test.tsx index 2ac15d294..4ffcaa836 100644 --- a/test/use-swr-config.test.tsx +++ b/test/use-swr-config.test.tsx @@ -1,29 +1,29 @@ -import { act, render, screen, fireEvent } from '@testing-library/react' +import { act, screen, fireEvent } from '@testing-library/react' import React, { useEffect, useState } from 'react' -import useSWR, { mutate, SWRConfig, useSWRConfig, Middleware } from 'swr' -import { sleep } from './utils' +import useSWR, { SWRConfig, useSWRConfig, Middleware } from 'swr' +import { + sleep, + renderWithConfig, + createKey, + renderWithGlobalCache +} from './utils' describe('useSWR - configs', () => { it('should read the config fallback from the context', async () => { let value = 0 const INTERVAL = 100 const fetcher = () => value++ + const key = createKey() - function Section() { - const { data } = useSWR('config-0') - return
data: {data}
- } function Page() { - // config provider - return ( - -
- - ) + const { data } = useSWR(key) + return
data: {data}
} - render() + renderWithConfig(, { + fetcher, + refreshInterval: INTERVAL, + dedupingInterval: 0 + }) // hydration screen.getByText('data:') // mount @@ -35,23 +35,24 @@ describe('useSWR - configs', () => { }) it('should stop revalidations when config.isPaused returns true', async () => { - const key = 'config-1' + const key = createKey() let value = 0 const fetcher = () => { if (value === 2) throw new Error() return value++ } - const revalidate = () => mutate(key) + let mutate function Page() { const [paused, setPaused] = useState(false) - const { data, error } = useSWR(key, fetcher, { + const { data, error, mutate: _mutate } = useSWR(key, fetcher, { revalidateOnMount: true, refreshInterval: 1, isPaused() { return paused } }) + mutate = _mutate useEffect(() => { // revalidate on mount and turn to idle @@ -65,27 +66,27 @@ describe('useSWR - configs', () => { ) } - render() + renderWithConfig() await screen.findByText('data: 0') // should not be revalidated - await act(() => revalidate()) + await act(() => mutate()) screen.getByText('data: 0') - await act(() => revalidate()) + await act(() => mutate()) screen.getByText('data: 0') // enable isPaused fireEvent.click(screen.getByText('data: 0')) // should be revalidated - await act(() => revalidate()) + await act(() => mutate()) screen.getByText('data: 1') // disable isPaused fireEvent.click(screen.getByText('data: 1')) // should not be revalidated - await act(() => revalidate()) + await act(() => mutate()) screen.getByText('data: 1') - await act(() => revalidate()) + await act(() => mutate()) screen.getByText('data: 1') }) @@ -101,7 +102,7 @@ describe('useSWR - configs', () => { return null } - render() + renderWithGlobalCache() expect(SWRConfig.default).toEqual(config) }) @@ -118,7 +119,7 @@ describe('useSWR - configs', () => { const middleware2: Middleware = useSWRNext => (k, f, c) => useSWRNext(k, f, c) - render( + renderWithConfig(