2017-09-20 5 views
0

componentWillMount 내부에서 함수를 테스트하려고합니다.jest와 효소를 사용하여 componentwillmount 내부에 테스트 함수를 어떻게 단위 짓는가?

구성 요소 나 또한 resetStatusMessage()와 formResetError을 확인하는 데 필요한 getAgent 기능이 called.And 있는지 여부를 테스트하려고

componentWillMount =() => { 
const { 
    agents, 
    match 
} = this.props; 
this.edit = false; 
this.agent = {}; 
if (match.params.id) { 
    this.edit = true; 
    this.agent = getAgent(agents, match.params.id); 
    if ("undefined" === typeof this.agent) { 
    push("/agents"); 
    } 
} 
resetStatusMessage(); 
formResetError(); 
}; 

render =() => { 
    const { form } = this.props; 
    const agent = this.agent; 
    this.avatar = agent.avatar; 
    ........................... 
} 

I'am()가 호출되었다.

테스트 :

it("should call getAgent when mounted",() => { 
const match = { 
params: { 
    id: "1" 
} 
}, 
agents ={ 
loading: false, 
byId : { 
    1:{ 
    firstName: "abc", 
    lastName: "xyz" 
    } 
}, 
avatar: "avatarUrl" 
}; 
let mockGetAgent = jest.fn(); 
const store = configureStore(); 
const wrapper = mount(
<Provider store={store}> 
    <AgentForm match={match} getAgent={mockGetAgent}/> 
</Provider> 
); 
expect(wrapper).toBeDefined(); 
expect(mockGetAgent).toBeCalled(); 
}); 

하지만 내 시험은이 메시지와 함께 실패? 내가이 문제를 해결할 수있는 방법

TypeError: Cannot read property 'avatar' of undefined 

내 프로젝트 반응에에 testing.am 새에 대한 농담과 효소를 사용하고 있습니다 반응과 효소. 어떤 도움이 정말 감사 할 것입니다.

+0

인데 그 중 어디에 getAgent()가 있고 다른 함수가 정의되어 있는지 확인하는 대신 래퍼에 해당 정보가 들어 있는지 확인해야합니다. 모의 함수를 만든 것처럼 보이지만 코드에서 업데이트 된 구성 요소 –

+0

에 전달하지 않은 것 같습니다. – Khushi

답변

0

죄송 합니다만, 소품으로 전달해야한다는 의미는 아닙니다. 이 구성 요소가 정상적으로 받침으로 기능을 getAgent받는 경우에만 작동합니다.

나는 getAgent이 구성 요소와 동일한 파일 내에서 정의되었지만 구성 요소 자체 외부에 정의 된 함수이고 구성 요소 만 내보내고 있다고 추측하고 있습니까?

이 경우 구성 요소를 탑재 할 때 해당 범위 내에서 getAgent을 찾고 호출하려고 시도합니다. 현재 mockGetAgent이라는 함수를 만들었지 만 구성 요소는 mockGetAgent을 호출하지 않습니다. 당신이해야 할 일은 너의 모의 getAgent을 호출하고 this.agent가 정의되어 있지 않도록 무언가를 돌려 주도록한다. (예 : 에이전트 중 하나와 같은 객체)

단위 테스트 :

  1. 구성 요소를 개별적으로 테스트해야합니다. 여기에 ProviderAgentForm을 동시에 테스트하고 있습니다.하지만 각자 특정 작업을 수행한다는 것을 감안할 때 테스트를 해보면 각자 자신의 일을하고 있습니다.
  2. 구성 요소가 사용하는 모든 함수가 호출되는지 검사하여 구성 요소를 테스트하는 것은 그리 효과적이지 않습니다. 기능이 수행 한 작업이 완료되었는지 확인해야합니다. 예 : getAgent 함수가 에이전트에 대한 정보를 가져 와서 렌더링 할 수 있다면 getAgent
+0

빠른 응답을 보내 주셔서 감사합니다. 당신이 제안한 것처럼 나는 객체 (에이전트)를 만듭니다. 이처럼 : let agent = {firstName : "test", 성 : "mock", 이메일 : "[email protected]"}; agent = mockGetAgent (agents, match.params.id); 이게 이런 뜻입니까? – Khushi

+0

옙 에이전트 객체는 괜찮아 보이지만 getAgent를 다음과 같이 조롱 해보십시오. const getAgent = jest.fn(). mockReturnValueOnce (agent); –