2017-11-21 6 views
0

기본적으로이 내가작성 농담 단위 테스트는

을 실행하면 내 내가 COMMAND1

it('Getting Latest Details',() => { 
    let eventSpy = sinon.spy(); 
     require('superagent').__setMockResponse({ 
      body: {    
       firstName: 'blah', 
       lastName: 'm ', 
       username: 'blah', 
       text: { 
        text : jest.fn() 
       }    
      } 
     }); 
     let dispatchListener = AppDispatcher.register((payload) => { 
      if (payload.action.type === 'COMMAND1') { 
       eventSpy(payload.action.payload);    
      } 
     });  

     AuthStore.loggedIn = jest.genMockFunction().mockReturnValue(true); 
     AuthStore.getToken = jest.genMockFunction().mockReturnValue('545r5e45er4e5r.erereere'); 
     MedsAlertsActions.getDetails(); 
     expect(eventSpy.called).toBe(true); 
     dispatch('COMMAND1', data); 
     AppDispatcher.unregister(dispatchListener); 
}); 

의 위의 함수에 대한 단위 테스트를 작성한 코드를

getDetails: function() { 
     var apiUrl = ConfigStore.get('api') 
     request 
      .get(apiUrl) 
      .set('X-Auth-Token', AuthStore.jwt) 
      .set('Accept', 'application/json') 
      .end(function (err, response) { 
       if (!err) { 
        if(response.text.indexOf("string") > -1){ 
         this.dispatch('COMMAND1', response); 
        } 
        else { 
         this.dispatch('COMMAND2', response.body.options); 
        } 
       } 
       else { 
        this.dispatch('COMMAND3', response && response.body); 
       } 
      }.bind(this)); 
    } 

반응입니다

npm test myfile.test 

나는 받고있다

TypeError: Cannot read property 'indexOf' of undefined 
  1. 그럼 bodyindexOf 응답을 넣으시겠습니까? 형식 오류를 해결하는 방법
  2. command2command3에 대한 테스트 사례를 작성하는 방법.

답변

1

나는 sinon을 사용하고 있습니다. 각 테스트 케이스에 대해 예상되는 응답을 반환하는 샌드 박스와 가짜 서버를 만들 수 있습니다. 예를 들어 이런 식으로 뭔가 :

describe('your test suite',() => { 
    let sandbox; 
    let server; 

    beforeAll(() => { 
    sandbox = sinon.sandbox.create(); 
    server = sandbox.useFakeServer(); 
    }); 

    it('Calls COMMAND1',() => { 

    //Sinon takes some ms to respond, so you have to use a setTimeout 
    setTimeout(
    () => server.respond([200, { 'Content-Type': 'text/html' }, 'some string']), 
     0 
    ); 

    // Put here your assertions 
    }); 


}); 

당신은 server.restore()sandbox.restore() 당신이 필요로 하나 하나 정리하는 데 사용할 수 있습니다. 게다가 sandbox.requests으로 작성한 요청에 액세스 할 수 있습니다.

여기는 유용한 게시물입니다. https://medium.com/@srph/axios-easily-test-requests-f04caf49e057, 축약에 관한 것이지만 동일한 방법으로 구현할 수 있습니다.

또한 sandbox에 대한 공식 sinon 설명서에서 자세한 내용을 확인할 수 있습니다. http://sinonjs.org/releases/v1.17.7/sandbox