2017-04-03 158 views
0

當我通過笑話測試史詩時,我得到測試失敗。jsdom:無法讀取null的屬性'_location'

Test Failed 
/.../node_modules/jsdom/lib/jsdom/browser/Window.js:148 

return idlUtils.wrapperForImpl(idlUtils.implForWrapper(window._document)._location); 

TypeError: Cannot read property '_location' of null 
    at Window.get location [as location] (/.../node_modules/jsdom/lib/jsdom/browser/Window.js:148:79) 
    at Timeout.callback [as _onTimeout] (/.../node_modules/jsdom/lib/jsdom/browser/Window.js:525:40) 
    at ontimeout (timers.js:380:14) 
    at tryOnTimeout (timers.js:244:5) 
    at Timer.listOnTimeout (timers.js:214:5) 

這是我的一些測試。我在fetchCategoriesEpic中使用了fetch()和promise。

it('test epic',() => { 
    ... 
    const action$ = ActionsObservable.of({ type: FETCH_CATEGORIES }) 

    fetchCategoriesEpic(action$) 
     .toArray() // collects everything in an array until our epic completes 
     .subscribe((actions) => { 
     expect(actions).toEqual([ 
      { type: FETCH_CATEGORIES }, 
      { type: FETCH_CATEGORIES_SUCCESS, payload: List(payload.data).map((category) => new Category(category)) } 
     ]) 
     }) 
    ... 
} 

我該如何解決這個問題?

回答

0

看來這個問題只與jsdom有關,而不是可重複觀察的,所以你可能想改變你的標題,描述,標籤。您可能希望在測試中包含jsdom的任何配置/用法以及您正在使用的節點版本。

Others have reported過去的類似問題,但沒有明確的解決方案,我可以通過快速的Google搜索找到。我的直覺告訴我你的配置稍微偏離了一點,它並沒有意識到它應該爲你創建一個假的位置對象。

0

我試圖在document未定義的環境中進行測試時嘗試使用document.documentElement時遇到此問題。

我爲應用程序代碼的那部分添加了條件,然後我的測試正常運行。

確保您的應用程序代碼而不是您的測試代碼試圖訪問您的測試環境中存在的ONLY元素。