2017-10-06 174 views
0

我想單元測試我正在工作的應用程序,並且遇到了使用axios發出AJAX請求的函數的問題。下面是我爲它編寫的模擬函數(注意:MockPBufData.txt文件是一個用協議緩衝區序列化的文件,我從datamine.mta.info下載了該文件,下載該文件可能會導致格式錯誤並導致此錯誤?) :Axios請求投擲未知錯誤

var GtfsRealtimeBindings = require('gtfs-realtime-bindings'); 
var axios = require('axios'); 

function RequestMock() { 
    axios.get('./MockPBufData.txt') 
     .then(function (body) { 
      var feedData = body.data; 
      var feed = GtfsRealtimeBindings.FeedMessage.decode(feedData); 
      return { feed: feed }; 
     }).catch(error => console.log(error)); 
} 

export default RequestMock; 

這裏是一個的失敗(我期待的屬性是每個反序列化文件,你會發現在datamine.mta.info)測試:

import React from 'react'; 
import RequestMock from '../mocks/RequestMock'; 

it('makes decoded data accessible from RequestMock.feed',() => { 

expect(RequestMock.feed).toHaveProperty('header.gtfs_realtime_version', '1.0'); 
}); 

最後,這裏的玩笑錯誤以及來自控制檯的堆棧跟蹤:

expect(object)[.not].toHaveProperty(path, value) 

    Expected object to be an object. Received: 
     undefined: undefined 

     at Object.<anonymous>.it (src/tests/api.test.js:12:37) 
     at Promise.resolve.then.el (node_modules/p-map/index.js:42:16) 
     at process._tickCallback (internal/process/next_tick.js:109:7) 


{ Error: Network Error 
      at createError (/Users/Ben/React/subway-checker/node_modules/axios/lib/core/createError.js:16:15) 
      at XMLHttpRequest.handleError [as onerror] (/Users/Ben/React/subway-checker/node_modules/axios/lib/adapters/xhr.js:87:14) 
      at XMLHttpRequest.callback.(anonymous function) (/Users/Ben/React/subway-checker/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:289:32) 
      at invokeEventListeners (/Users/Ben/React/subway-checker/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:219:27) 
      at invokeInlineListeners (/Users/Ben/React/subway-checker/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:166:7) 
      at EventTargetImpl._dispatch (/Users/Ben/React/subway-checker/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:122:7) 
      at EventTargetImpl.dispatchEvent (/Users/Ben/React/subway-checker/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:87:17) 
      at XMLHttpRequest.dispatchEvent (/Users/Ben/React/subway-checker/node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:61:35) 
      at XMLHttpRequest.abort (/Users/Ben/React/subway-checker/node_modules/jsdom/lib/jsdom/living/xmlhttprequest.js:405:16) 
      at Object.abort (/Users/Ben/React/subway-checker/node_modules/jsdom/lib/jsdom/living/xhr-utils.js:315:13) 
      at RequestManager.close (/Users/Ben/React/subway-checker/node_modules/jsdom/lib/jsdom/living/nodes/Document-impl.js:146:21) 
      at Window.close (/Users/Ben/React/subway-checker/node_modules/jsdom/lib/jsdom/browser/Window.js:362:29) 
      at JSDOMEnvironment.dispose (/Users/Ben/React/subway-checker/node_modules/jest-environment-jsdom/build/index.js:44:19) 
      at Promise.resolve.then (/Users/Ben/React/subway-checker/node_modules/jest/node_modules/jest-cli/build/runTest.js:102:17) 
      at process._tickCallback (internal/process/next_tick.js:109:7) 
     config: 
     { adapter: [Function: xhrAdapter], 
      transformRequest: { '0': [Function: transformRequest] }, 
      transformResponse: { '0': [Function: transformResponse] }, 
      timeout: 0, 
      xsrfCookieName: 'XSRF-TOKEN', 
      xsrfHeaderName: 'X-XSRF-TOKEN', 
      maxContentLength: -1, 
      validateStatus: [Function: validateStatus], 
      headers: { Accept: 'application/json, text/plain, */*' }, 
      method: 'get', 
      url: './MockPBufData.txt', 
      data: undefined }, 
     request: 
     XMLHttpRequest { 
      onabort: null, 
      onerror: [Function: handleError], 
      onload: null, 
      onloadend: null, 
      onloadstart: null, 
      onprogress: null, 
      ontimeout: [Function: handleTimeout], 
      upload: 
      XMLHttpRequestUpload { 
       onabort: null, 
       onerror: null, 
       onload: null, 
       onloadend: null, 
       onloadstart: null, 
       onprogress: null, 
       ontimeout: null, 
       _ownerDocument: [Object] }, 
      onreadystatechange: [Function: handleLoad] }, 
     response: undefined } 

回答

0

您不能訪問功能(RequestMock.feed)......那個函數實際上返回它的內部變量,所以你只需要以下條件:

expect(RequestMock()).toHaveProperty('header.gtfs_realtime_version', '1.0');

+0

作出改變,我發現了同樣的錯誤依然。 – bkula