-
Notifications
You must be signed in to change notification settings - Fork 0
/
09.http-msw-mock.js
37 lines (31 loc) · 1.15 KB
/
09.http-msw-mock.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import 'whatwg-fetch'
import * as React from 'react'
import {render, screen, waitFor} from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import {rest} from 'msw'
import {setupServer} from 'msw/node'
import {GreetingLoader} from '../greeting-loader-01-mocking'
// need: instead of mocking the whole api, just intercept loadGreeting
// so that we can have an integration test
/** An intercept server, intercepting only loadGreeting from the api*/
const server = setupServer(
rest.post('/greeting', (req, res, ctx) => {
return res(ctx.json({data: {greeting: `Hello ${req.body.subject}`}}))
}),
)
beforeAll(() => server.listen({onUnhandledRequest: 'error'}))
afterAll(() => server.close())
afterEach(() => server.resetHandlers())
test('loads greetings on click', async () => {
// Arrange
render(<GreetingLoader />)
const nameInput = screen.getByLabelText(/name/i)
const loadButton = screen.getByText(/load/i)
// Act
userEvent.type(nameInput, 'Mary')
userEvent.click(loadButton)
// use waitFor for DOM to update
await waitFor(() =>
expect(screen.getByLabelText(/greeting/i)).toHaveTextContent('Hello Mary'),
)
})