2016-08-23 3 views
0

컨테이너 구성 요소 메소드를 테스트하려고합니다. 내 컨테이너에는 모든 제안을로드하고 상태를 설정하는 비동기 메소드가 있습니다. 예 :비동기 테스트 - Mocha 및 Chai - done() 콜백이 호출되고 있는지 확인하십시오.

loadProposal(proposalId) { 
    return axios 
      .get("http://localhost:9292/api/proposal_drafts/1.json") 
      .then(response => { 
       this.setState({ 
       proposal: Immutable.fromJS(response.data) 
       }) 
      }) 
    } 

따라서이 방법을 테스트하려면 구성 요소 인스턴스를 가져 와서 (api url을 비웃음으로써) 메소드를 호출하십시오.

it("sets proposal in the state", (done) => { 
    const wrapper = shallow(<Container/>) 

    loadProposalRequest(1) 

    wrapper.instance().loadProposal(1).then(() => { 
     chai.expect(wrapper.state().proposal).to.be(Map) 
     done() 
    }) 
    }) 

는하지만 콘솔에서이 오류가 발생합니다 :

Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.

옵스 : 다음 내부 CONSOLE.LOG을 (wrapper.state()) 넣으면(). 로그에 내 상태가 올바르게 표시됩니다. chai.expect() (나는 무슨 일이 일어나고 있는지 생각)에서 오류가 발생하는 경우

답변

0

두 가지 상황이 발생합니다

    done 때문에 발생 오류, 전화를받을 수 없습니다
  • ;
  • 추가적인 오류 처리가 없으므로 오류가 발견되지 않습니다.
당신은 두 문제를 제거하는 대신 모카의 약속의 지원을 사용해야합니다

: 당신은 또한 사용할 수 있습니다

it("sets proposal in the state",() => { 
    const wrapper = shallow(<Container/>) 

    loadProposalRequest(1) 

    return wrapper.instance().loadProposal(1).then(() => { 
    chai.expect(wrapper.state().proposal).to.be(Map) 
    }) 
}) 
0

chai-as-promised

당신은 당신이 정말로 무엇을 의미하는지 표현하는 코드를 작성할 수 있습니다

:

return doSomethingAsync().should.eventually.equal("foo"); 

또는 return이 바람직하지 않은 경우 (예 : 스타일 고려 사항) 또는 possib이 아닌 경우 le (예. 테스트 프레임 워크가 비동기 테스트 완료 신호를 반환 할 수없는 경우) 다음 해결 방법을 사용할 수 있습니다.

doSomethingAsync().should.eventually.equal("foo").notify(done); 
관련 문제