2016-10-19 135 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__未定义。对此有何建议? –

相关问题