반응형
농담 모의 반응 컨텍스트
응용 프로그램을 테스트하는 방법에 대한 도움이 필요합니다.React Context.
여기 제 샘플 설정입니다.
context.context.context.displaces
import React from 'react'
export const AppContext = React.createContext()
App.js
import React from 'react'
import MyComponent from './MyComponent'
import {AppContext} from './context'
const App extends React.Component {
state = {
items: []
}
handleItemAdd = newItem => {
const {items} = this.state
items.push(newItem)
this.setState(items)
}
render() {
return (
<AppContext.Provider value={{
addItem: this.handleItemAdd
}}>
<MyComponent />
</AppContext.Provider>
)
}
}
export default App
My Component.js
import React from 'react'
import {AppContext} from './context'
const MyComponent extends React.Component {
render() {
return (
<AppContext.Consumer>
{addItem =>
<button onClick={() => addItem('new item')}>
Click me
</button>
}
</AppContext.Consumer>
)
}
}
export default MyComponent
이것은 간단한 예입니다.이 사이에 더 많은 층이 있다고 상상해 보세요.App그리고.MyComponent, 그 때문에, 를 사용합니다.React Context.
그리고 여기 제 시험 파일입니다MyComponent.
My Component.test.js
import React from 'react'
import {render, fireEvent} from 'react-testing-library'
test('component handles button click', () => {
const {getByText} = render(
<MyComponent />
)
const button = getByText('Click me')
fireEvent.click(button)
expect...?
}
중요한 건...AppContext.Consumer구현의 일부입니다.MyComponent이 테스트에서는 직접 접속할 수 없습니다.어떻게 조롱하지?AppContext.Consumer버튼을 클릭하면 함수 호출이 발생하는지 확인할 수 있습니다.
이론적으로 이걸 테스트하려면MyComponent내 안에서App단, 유닛테스트를 작성하고 싶습니다.MyComponent오직.
콘텍스트를 컴포넌트로 렌더링하기만 하면 됩니다.
const addItem = jest.fn()
render(
<AppContext.Provider value={{ addItem }}>
<MyComponent />
</AppContext.Provider>
)
React-testing-Library를 사용한 컨텍스트 조롱을 참조하십시오.
@Giorgio의 솔루션을 사용하여 완전한 테스트 예를 추가하고 싶습니다.여기서는 My Component가 렌더링되고 해당 버튼이 한 번 클릭되는 것을 테스트합니다.
My Component.test.js
import React from 'react'
import { render, fireEvent } from 'react-testing-library'
test('component handles button click', () => {
const addItem = jest.fn()
render(
<AppContext.Provider value={{ addItem }}>
<MyComponent />
</AppContext.Provider>
)
fireEvent.click(screen.getByText(/click me/))
expect(addItem).toHaveBeenCalledTimes(1)
}
언급URL : https://stackoverflow.com/questions/54292298/jest-mock-react-context
반응형
'programing' 카테고리의 다른 글
| Angularjs - 현재 날짜 표시 (0) | 2023.03.05 |
|---|---|
| Angular 2의 특정 루트에 대해 RouteReuseStrategy shouldDetach를 구현하는 방법 (0) | 2023.03.05 |
| 문자열을 int64 유형의 Go 값으로 이동 해제할 수 없습니다. (0) | 2023.03.05 |
| redex 툴킷에서 리듀서와 엑스트라 리듀서의 차이점은 무엇입니까? (0) | 2023.03.05 |
| Plask에 JSON을 보내는 중, request.args vs request.형태 (0) | 2023.03.05 |