useState() 후크를 사용하여 기능 컴포넌트를 테스트할 때 상태를 설정합니다.
내가 효소로 클래스 성분을 검사했을 때 나는 할 수 있었다.wrapper.setState({})
상태를 설정합니다.기능 컴포넌트를 테스트하고 있는데 어떻게 하면 동일한 작업을 수행할 수 있습니까?useState()
후크?
예를 들어 내 컴포넌트에는 다음이 있습니다.
const [mode, setMode] = useState("my value");
그리고 나는 변하고 싶다.mode
내 시험 안에
훅에서 스테이트를 사용하는 경우 테스트에서는 스테이트 등의 구현 세부사항을 무시하여 적절하게 테스트해야 합니다.컴포넌트가 자녀에게 올바른 상태를 전달하는지 확인할 수 있습니다.
당신은 Kent C가 쓴 이 블로그 게시물에서 좋은 예를 찾을 수 있습니다.도드.
여기 코드 예시와 함께 발췌한 내용이 있습니다.
상태 구현 세부 정보에 의존하는 테스트 -
test('setOpenIndex sets the open index state properly', () => {
const wrapper = mount(<Accordion items={[]} />)
expect(wrapper.state('openIndex')).toBe(0)
wrapper.instance().setOpenIndex(1)
expect(wrapper.state('openIndex')).toBe(1)
})
상태 구현 세부 정보에 의존하지 않는 테스트 -
test('counter increments the count', () => {
const {container} = render(<Counter />)
const button = container.firstChild
expect(button.textContent).toBe('0')
fireEvent.click(button)
expect(button.textContent).toBe('1')
})
이게 내가 찾은 방법이지, 이게 옳고 그름을 말하는 게 아니야.제 경우, 코드 블록은 특정 값으로 설정된 상태에 의존합니다.테스트에 대한 제 의견은 '리액트 투 나 자신에게'에서 유지하겠습니다.
테스트 파일:리액트 라이브러리의 Import를 조정합니다.
import * as React from 'react'
다음으로 useState 테스트스파이에서 구현 시뮬레이션을 실시합니다.
const stateSetter = jest.fn()
jest
.spyOn(React, 'useState')
//Simulate that mode state value was set to 'new mode value'
.mockImplementation(stateValue => [stateValue='new mode value', stateSetter])
모의 useState는 테스트에 대해 useState를 호출하는 모든 인스턴스에 해당되므로 여러 상태 값이 있는 경우 모두 'new mode value'로 설정됩니다.다른 사람이 그 문제를 해결해 줄 수 있을 겁니다.도움이 됐으면 좋겠다.
테스트 파일 맨 위에 먼저 다음과 같이 정의할 수 있습니다.
import { useState } from 'react';
jest.mock('react', () => ({
...jest.requireActual('react'),
useState: jest.fn()
}));
const useStateMock: jest.Mock<typeof useState> = useState as never;
그 후 각 테스트에서 테스트하고자 하는 다른 값으로 사용할 수 있습니다.
const setValue = jest.fn();
useStateMock
.mockImplementation(() => ['value', setValue]);
언급URL : https://stackoverflow.com/questions/55342181/set-state-when-testing-functional-component-with-usestate-hook
'sourcecode' 카테고리의 다른 글
앵커 태그의 유효한 특성 '비활성화'입니까? (0) | 2023.03.25 |
---|---|
React.js에서 componentWillMount 또는 componentDidMount에서 초기 네트워크 요청을 해야 합니까? (0) | 2023.03.25 |
커밋 메시지에서 "CL"은 무엇을 의미합니까?그것은 무엇을 나타냅니까? (0) | 2023.03.20 |
StackOverflow의 '태그' 텍스트박스는 어떻게 자동 완성됩니까? (0) | 2023.03.20 |
워드프레스와 woocommerce가 포함된 체크아웃 페이지에서만 1개 국가에 한정 (0) | 2023.03.20 |