bookshelf/INSTRUCTIONS.md at exercises/11-unit-testing · kentcdodds/bookshelf (github.com)
Background
실습
server.use(
rest.get(`https://bookshelf.jk/example`, async (req, res, ctx) => {
return res(ctx.json({some: 'Sweet json!'}))
}),
)
const response = await window.fetch(`https://bookshelf.jk/example`)
const result = response.json()
result.some === 'Sweet json!' // true
1. Test formatDate
간단한 순수 함수로 날짜를 포맷하는 함수를 테스트해보자.
import {formatDate} from '../misc'
test('formatDate formats the date to look nice', () => {
expect(formatDate(new Date('October 18, 1988'))).toBe('Oct 88')
})
이런 순수 함수의 기능은 UI 사용자 측면에서는 의미가 없는 경우도 많다.
유틸 함수의 테스트를 작성할 때에는, API 컨슈머 관점 / UI 사용자 관점 둘 중 하나의 입장에서 기능을 이용한다 생각하고 작성한다.
2. msw Server 세팅
bookshelf/test-server.js at exercises/11-unit-testing · kentcdodds/bookshelf (github.com)
import {setupServer} from 'msw/node'
import {handlers} from './server-handlers'
const server = setupServer(...handlers)
export * from 'msw'
export {server}
아래 페이지에 가면 msw 설정이 되어있다.
msw는 해당 api로의 fetch 요청을 프록시해서, 실제 서버로 요청을 보내지 않고 테스트 데이터로 바꿔준다.
따라서 서버가 없어도 개발이 가능하다.
이 성질을 이용해서 테스트 작성을 수월하게 해준다.
bookshelf/server-handlers.js at exercises/11-unit-testing · kentcdodds/bookshelf (github.com)
3. 클라이언트 테스트 (서버와의 상호작용 테스트)
src/setupTests.js
bookshelf/setupTests.extra-2.js at exercises/11-unit-testing · kentcdodds/bookshelf (github.com)
모든 테스트에 대해서 msw 서버 세팅을 적용한다.
모든 테스트 종료 시(afterEach) overriding된 핸들러를 초기화한다.
import {server} from 'test/server'
// enable API mocking in test runs using the same request handlers
// as for the client-side mocking.
beforeAll(() => server.listen())
afterAll(() => server.close())
afterEach(() => server.resetHandlers())
src/utils/__tests__/api-client.extra-2.js
bookshelf/api-client.extra-2.js at exercises/11-unit-testing · kentcdodds/bookshelf (github.com)
'FrontEnd' 카테고리의 다른 글
[React][Remix][Jokes App Tutorial][Part1] (0) | 2022.01.05 |
---|---|
[Epic React][Build an Epic React App][Testing Hooks and Components][훅과 컴포넌트 테스트] (3) | 2022.01.02 |
[Epic React][Build an Epic React App][Render as you fetch][렌더링 하면서 필요한 데이터 가져오기] (0) | 2022.01.02 |
[Epic React][Build an Epic React App][Performance] (0) | 2022.01.01 |
[Epic React][Build an Epic React App][Context] (0) | 2022.01.01 |