2016-11-11 2 views
1

Jest를 배우고 fetch 약속을 반환하는 비동기 함수를 모의하려고하는 문제로 돌입니다. 약속이 전혀 해결되지 않으면 "이 오류가 발생 될 수 : 자신의 문서에서미해결 된 약속으로 인해 Jest가 비동기 테스트에 실패했습니다

이있다 - 오류 : 시간 초과 - 비동기 콜백은 가장 일반적이 jasmine.DEFAULT_TIMEOUT_INTERVAL. 에 의해 지정된 제한 시간 내에서 호출되지 않았습니다 예를 들어 global.Promise = require.requireActual('promise');과 같이 글로벌 약속 구현을 자신의 것으로 대체하거나 사용 된 약속 라이브러리를 단일 약속으로 통합하는 것을 고려하십시오. "

이것은 문제 일 수는 있지만 내 문제를 해결하거나 Promise이 어디에서 고장 났는지 확인하는 방법은 분명하지 않습니다.

아마도 농담의 나의 조롱에 대한 나의 이해는 틀린가? 나는 그들의 예를 사용해 보았고 완벽하게 작동했다.

// myModule/index.js 
import { OK } from 'http-status-codes'; 
import request from './request'; 
import parseForm from '../../../../modules/parseMultiPart'; 

export default (req, res, next) => parseForm(req) 
    .then(body => request(body, req) 
    .then(result => result.text()) 
    .then(result => res.status(OK).send(result))) 
.catch(next); 


// myModule/request.js 
import fetch from 'node-fetch'; 

export default (body, req) => fetch('http://url', { 
    method: 'POST', 
    body: JSON.stringify(body.fields), 
    headers: { 
     'Content-Type': 'application/json', 
     'X-Request-Id': req.id 
    } 
}); 


// myModule/__tests__/myModule.test.js 
import MockReq from 'mock-req'; 
import MockRes from 'mock-res'; 
import myModule from '../'; 

jest.mock('../request'); 

describe('endpoint can receive form data',() => { 
    const response = new MockRes(); 
    const request = new MockReq({ 
     method: 'POST', 
     url: '/webhook', 
     headers: { 
      'Content-Disposition': 'form-data; name="file"; filename="plain.txt"', 
      'Content-Type': 'multipart/form-data; custom=stuff; boundary=----TLV0SrKD4z1TRxRhAPUvZ', 
      'Content-Length': 213 
     } 
    }); 

    it('can parse and fulfill a promise',() => myModule(request, response) 
     .then(text => expect(text).toEqual('API Event Received')) 
    ); 
}); 


// myModule/__mocks__/request.js 
export default function request() { 
    return new Promise((resolve) => { 
     process.nextTick(
      () => resolve('API Event Received') 
     ); 
    }); 
} 

답변

0

내가 잘못된 일을 조롱했다 : 여기

● endpoint can receive form data › can parse and fulfill a promise 

    Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL. 

내 모듈 및 테스트 (단위 : https://facebook.github.io/jest/docs/tutorial-async.html#content)

이것은 내가 콘솔에서 무엇을 얻을 수 있습니다. 이 경우 데이터가 아닌 기능을 조롱해야합니다.

jest.mock('../parseMultiPart'); 
jest.mock('../request'); 

내 요청이 잘못되어 약속이 되돌아 오지 않았습니다.

관련 문제