2016-10-19 166 views
7

我目前正在開發一個反應原生項目並希望利用Firebase JS SDK。爲了熟悉它的API,我想用Jest編寫一些學習測試。這是我的測試:Jest + Firebase:TypeError:無法讀取未定義的屬性'defineProperties'

import Firebase from 'firebase'; 
describe('Firebase', function() { 
    it('should work', function() { 
    expect(null).toBeNull() 
    }) 
}); 

不幸的是我得到這個錯誤: ●測試套件運行失敗

TypeError: Cannot read property 'defineProperties' of undefined 

    at node_modules/firebase/app-node.js:18:234 
    at Object.<anonymous> (node_modules/firebase/app-node.js:23:260) 
    at Object.<anonymous> (node_modules/firebase/firebase-node.js:8:16) 
    at Object.<anonymous> (firebase.test.js:1:104) 

如果我更換進口狀態import React from 'react'一切工作正常。那麼爲什麼我無法使用Firebase來測試一些API調用。

這是我package.json

{ 
    ..., 
    "dependencies": { 
    "firebase": "^3.5.0", 
    "react": "15.3.2", 
    "react-native": "0.35.0" 
    }, 
    "jest": { 
    "preset": "jest-react-native" 
    }, 
    "devDependencies": { 
    "babel-jest": "16.0.0", 
    "babel-preset-react-native": "1.9.0", 
    "jest": "16.0.1", 
    "jest-react-native": "16.0.0", 
    "react-test-renderer": "15.3.2" 
    } 
} 
+1

在這裏是一樣的。 Firebase在應用程序本身內運作良好,但是一旦您嘗試運行測試,就會發生此錯誤。相當煩人:( –

+0

同樣在這裏,你有沒有想出解決方案來構建你的應用程序? – hs2345

+0

同樣的問題,如果我從'firebase'導入*作爲firebase;'我得到'無法讀取屬性'導航器' undefined' – rel1x

回答

2

的問題是,在安裝和配置「笑話反應的天然的」和「反應天然的」預設打破我們的能力,「進口」火力!修復方法是在test.js文件中輸入require firebase(而不是import),然後添加一行導入react-native的行。如果沒有import ing react-native in 另外require('firebase'),firebase將不會包含在測試文件中!這裏是我的github repo,它引導你完成重現錯誤的步驟,以及如何解決它。

也可能有一個陳舊的笑話高速緩存,這可能需要您運行

./node_modules/jest/bin/jest.js --no-cach

這似乎發生,每次我改變什麼做一個預處理器選項。

See jest documentation on caching issues.

+0

對我來說就是這樣!我認爲我可以通過不同的笑話來獲得它的工作方式:)我已經在本地和Cloud9的Linux機器上嘗試了這一點。兩者都有效。最主要的是使用''babel「:{」presets「:[」es2015「,」react-native「]}或者我猜測一個帶有相同預置的.babelrc文件,INSTEAD就是笑話。 –

+0

刪除Jest預設確實奏效,謝謝!我會盡快(10小時內)獎賞賞金。 –

+0

非常感謝!這實際上解決了我的問題,我可以'無需任何錯誤地導入Firebase'。因爲這是我的實際問題,我標記爲回答:)不幸的是刪除'「jest」:{「preset」:「jest-react-native」}'打破測試我導入「react-native」的錯誤:ReferenceError: __DEV__未定義。對此有何建議? –

相關問題