컴포넌트 전역으로 사용하고 있는, emotion, provider 설정을 똑같이 해주면 된다.
공통 모듈 test-utils.tsx
import { ThemeProvider } from '@emotion/react'
import { render, RenderOptions } from '@testing-library/react'
import CartProvider from 'contexts/CartProvider'
import React, { ReactElement } from 'react'
import { theme } from 'utils/styles'
interface Props {
children: React.ReactNode
}
export const CustomProvider = ({ children }: Props) => {
return (
<ThemeProvider theme={theme}>
<CartProvider> {children}</CartProvider>
</ThemeProvider>
)
}
const customRender = (
ui: ReactElement,
options?: Omit<RenderOptions, 'wrapper'>,
) => render(ui, { wrapper: CustomProvider, ...options })
export * from '@testing-library/react'
export { customRender as render }
사용자 정의 파일에서 전역으로 설정해 둔 파일을 이용해서 테스팅 시작
import { render, screen, fireEvent } from './test-utils'
describe('버튼 컴포넌트 테스트<Button />', () => {
it('렌더링 테스트', () => {
render(<Button>버튼</Button>)
const button = screen.getByText('버튼')
expect(button).toBeInTheDocument()
})
})
fireEvent
를 이용하여 원하는 동작 이벤트 발생