Skip to content

Commit af15f6b

Browse files
committed
Updates tests for DemoScreen
1 parent 396aa55 commit af15f6b

File tree

2 files changed

+44
-14
lines changed

2 files changed

+44
-14
lines changed

template/src/__mocks__/fixtures.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,10 @@ export const comicMockResponse = {
44
img: 'https://imgs.xkcd.com/comics/first_internet_interaction.png',
55
title: 'First Internet Interaction',
66
}
7+
8+
export const comicMockParsed = {
9+
description: comicMockResponse.alt,
10+
id: comicMockResponse.num,
11+
imageUrl: comicMockResponse.img,
12+
title: comicMockResponse.title,
13+
}

template/src/screens/DemoScreen.test.tsx

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,37 @@
1-
import { comicMockResponse as mockComicData } from '__mocks__/fixtures'
1+
import { comicMockParsed } from '__mocks__/fixtures'
22
import React from 'react'
33
import { TestIDs } from '@config/testIDs'
44
import Routes from '@navigation/routes'
5-
import { createNavigationProps, fireEvent, render } from '@utils/testing'
5+
import * as remoteComics from '@remote/comics'
6+
import { act, createNavigationProps, fireEvent, render } from '@utils/testing'
67
import DemoScreen from './DemoScreen'
78

89
// eslint-disable-next-line @typescript-eslint/no-explicit-any
910
const navPropsMock = createNavigationProps() as any
1011

12+
const mockUseLatestComicQuery = jest.spyOn(remoteComics, 'useLatestComicQuery').mockReturnValue({
13+
isLoading: false,
14+
data: undefined,
15+
} as ReturnType<typeof remoteComics.useLatestComicQuery>)
16+
17+
jest.mock('@remote/auth', () => ({
18+
useLogOutMutation: jest.fn().mockImplementation(() => ({
19+
mutate: jest.fn(),
20+
isPending: false,
21+
})),
22+
}))
23+
1124
describe('when increment button pressed', () => {
1225
it('should increment counter by 5', () => {
1326
const { getByText } = render(<DemoScreen {...navPropsMock} />)
1427
const prevCounterValue = parseInt(
1528
getByText(/demoScreen.counter/).props.children.split(' ')[1],
1629
10,
1730
)
18-
fireEvent.press(getByText(/demoScreen.incrementButton/))
31+
act(() => {
32+
fireEvent.press(getByText(/demoScreen.incrementButton/))
33+
})
34+
1935
const counterValue = parseInt(getByText(/demoScreen.counter/).props.children.split(' ')[1], 10)
2036

2137
expect(counterValue).toBe(prevCounterValue + 5)
@@ -29,7 +45,10 @@ describe('when decrement button pressed', () => {
2945
getByText(/demoScreen.counter/).props.children.split(' ')[1],
3046
10,
3147
)
32-
fireEvent.press(getByText(/demoScreen.decrementButton/))
48+
49+
act(() => {
50+
fireEvent.press(getByText(/demoScreen.decrementButton/))
51+
})
3352
const counterValue = parseInt(getByText(/demoScreen.counter/).props.children.split(' ')[1], 10)
3453

3554
expect(counterValue).toBe(prevCounterValue - 15)
@@ -39,14 +58,11 @@ describe('when decrement button pressed', () => {
3958
describe('Comic card', () => {
4059
describe('when comic is available', () => {
4160
it('renders the comic', async () => {
42-
fetchMock.mockResponseOnce(JSON.stringify(mockComicData))
61+
mockUseLatestComicQuery.mockReturnValueOnce({
62+
isLoading: false,
63+
data: comicMockParsed,
64+
} as ReturnType<typeof remoteComics.useLatestComicQuery>)
4365

44-
const comicMock = {
45-
id: 1,
46-
title: 'Some mock title',
47-
imageUrl: 'http://example.com/test.jpg',
48-
description: 'Some mock description',
49-
}
5066
const preloadedState = {
5167
demo: {
5268
counter: 420,
@@ -57,13 +73,18 @@ describe('Comic card', () => {
5773
preloadedState,
5874
})
5975

60-
expect(getByText(comicMock.title)).toBeDefined()
61-
expect(getByText(comicMock.description)).toBeDefined()
76+
expect(getByText(comicMockParsed.title)).toBeDefined()
77+
expect(getByText(comicMockParsed.description)).toBeDefined()
6278
expect(getByTestId(TestIDs.DEMO_COMIC_IMAGE)).toBeDefined()
6379
})
6480
})
6581

6682
describe('when NO comic is available', () => {
83+
mockUseLatestComicQuery.mockReturnValue({
84+
isLoading: true,
85+
data: undefined,
86+
} as ReturnType<typeof remoteComics.useLatestComicQuery>)
87+
6788
it('renders the loading spinner', () => {
6889
const preloadedState = {
6990
demo: {
@@ -83,7 +104,9 @@ describe('Comic card', () => {
83104
describe('when "go to translations demo" pressed', () => {
84105
it('should navigate to translations demo screen', () => {
85106
const { getByText } = render(<DemoScreen {...navPropsMock} />)
86-
fireEvent.press(getByText(/demoScreen.goToTranslationsDemo/))
107+
act(() => {
108+
fireEvent.press(getByText(/demoScreen.goToTranslationsDemo/))
109+
})
87110

88111
expect(navPropsMock.navigation.navigate).toBeCalledWith(Routes.TRANSLATIONS_DEMO_SCREEN)
89112
})

0 commit comments

Comments
 (0)