使用Jest和Firebase时出现TypeError: Cannot read property 'defineProperties' of undefined错误

7

我目前正在开发一个React Native项目,想要利用Firebase JS SDK。为了熟悉它的所有API,我打算使用Jest编写一些学习测试。这是我的测试:

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在应用程序内部运行得很好,但一旦你尝试运行测试,就会出现这个错误。非常烦人 :( - Kevin Renskers
同样的问题。你解决了如何构建你的应用程序的问题了吗? - hs2345
同样的问题,如果我使用 import * as firebase from 'firebase';,我会得到 Cannot read property 'navigator' of undefined - rel1x
1个回答

4
问题在于安装和配置“jest-react-native”和“react-native”预设会破坏我们导入firebase的能力!解决方法是在您的test.js文件中require firebase(而不是import),并添加一行导入react-native的代码。如果没有在require('firebase')之外还额外import react-native,则firebase将不会包含在测试文件中!这是我的github repo,它会引导您完成重现错误以及如何修复它的步骤。
还可能存在过时的jest缓存,可能需要您运行以下命令:

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

每次更改与预处理器选项有关的任何内容时似乎都会发生这种情况。 请参阅jest文档中有关缓存问题的说明。

非常感谢!那真的解决了我的问题,我可以无误地import Firebase。由于这是我的实际问题,我已将其标记为已回答 :) 不幸的是,删除"jest": { "preset": "jest-react-native" }会导致测试失败,其中我使用“react-native”进行导入,并出现错误:ReferenceError: __DEV__ is not defined。对此有什么建议吗? - dennis-tra
非常感谢您的帮助和时间,@BenjaminHBoruff!我已经按照您的建议进行了更改,但是在“react-native”模块上仍然出现了上述的__DEV__错误。导入Firebase仍然可以正常工作。 - dennis-tra
1
@Graf,我刚刚从一位在Facebook工作的Jest开发人员那里得到消息:“Firebase正在做一些奇怪的事情,有一个关于它的未解决问题,我们还没有时间来修复它”。所以,看起来是Firebase的问题... - Benjamin H Boruff
1
找不到存储库,附在答案中的链接已损坏。 - Pardeep Jain
1
@PardeepJain 抱歉,我在清理旧的存储库时意外删除了该存储库。我已经恢复了它。谢谢! - Benjamin H Boruff
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接