Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase @react本地火基破坏单元测试_Firebase_React Native_Jestjs_React Native Firebase - Fatal编程技术网

Firebase @react本地火基破坏单元测试

Firebase @react本地火基破坏单元测试,firebase,react-native,jestjs,react-native-firebase,Firebase,React Native,Jestjs,React Native Firebase,我安装了@react native firebase的v6,它按预期工作,但当我尝试运行单元测试时,出现以下错误: Jest encountered an unexpected token Details: /node_modules/@react-native-firebase/database/lib/index.js:18 import { isBoolean, isNumber, isString } from '@react-native-firebase/app/lib/comm

我安装了@react native firebase的v6,它按预期工作,但当我尝试运行单元测试时,出现以下错误:

Jest encountered an unexpected token

Details:

/node_modules/@react-native-firebase/database/lib/index.js:18
import { isBoolean, isNumber, isString } from '@react-native-firebase/app/lib/common';
       ^

SyntaxError: Unexpected token {
Test suite failed to run

Invariant Violation: Native module cannot be null.

  at invariant (node_modules/invariant/invariant.js:40:15)
  at RNFBNativeEventEmitter.NativeEventEmitter (node_modules/react-native/Libraries/EventEmitter/NativeEventEmitter.js:36:7)
  at new RNFBNativeEventEmitter (node_modules/@react-native-firebase/app/lib/internal/RNFBNativeEventEmitter.js:24:5)
  at Object.<anonymous> (node_modules/@react-native-firebase/app/lib/internal/RNFBNativeEventEmitter.js:48:16)
  at Object.<anonymous> (node_modules/@react-native-firebase/app/lib/internal/registry/nativeModule.js:21:1)
我尝试将@react native firebase/database&@react native firebase/app添加到jest config transformIgnorePatterns,但出现以下错误:

Jest encountered an unexpected token

Details:

/node_modules/@react-native-firebase/database/lib/index.js:18
import { isBoolean, isNumber, isString } from '@react-native-firebase/app/lib/common';
       ^

SyntaxError: Unexpected token {
Test suite failed to run

Invariant Violation: Native module cannot be null.

  at invariant (node_modules/invariant/invariant.js:40:15)
  at RNFBNativeEventEmitter.NativeEventEmitter (node_modules/react-native/Libraries/EventEmitter/NativeEventEmitter.js:36:7)
  at new RNFBNativeEventEmitter (node_modules/@react-native-firebase/app/lib/internal/RNFBNativeEventEmitter.js:24:5)
  at Object.<anonymous> (node_modules/@react-native-firebase/app/lib/internal/RNFBNativeEventEmitter.js:48:16)
  at Object.<anonymous> (node_modules/@react-native-firebase/app/lib/internal/registry/nativeModule.js:21:1)
就像这样:

jest.mock('@react-native-firebase/database', () => {
   return () => ({
     ref: jest.fn()
   })
 }); 
mkdir -p __mocks__/@react-native-firebase/database
touch index.js
但是得到同样的错误,有什么建议吗

my package.json:

{
  "name": "Project",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "start": "react-native start",
    "test": "jest",
    "lint": "eslint ."
  },
  "dependencies": {
    "@react-native-community/push-notification-ios": "^1.0.6",
    "@react-native-firebase/app": "^6.3.1",
    "@react-native-firebase/database": "^6.3.1",
    "@react-native-firebase/messaging": "^6.3.1",
    "axios": "^0.19.0",
    "base-64": "^0.1.0",
    "blinkid-react-native": "^5.2.0",
    "firebase": "^7.6.0",
    "lodash": "^4.17.15",
    "mobx": "^5.15.0",
    "mobx-persist": "^0.4.1",
    "mobx-react": "^6.1.4",
    "react": "16.9.0",
    "react-native": "0.61.4",
    "react-native-auth0": "^2.1.0",
    "react-native-collapsible": "^1.5.1",
    "react-native-config": "^0.12.0",
    "react-native-confirmation-code-input": "^1.0.4",
    "react-native-datepicker": "^1.7.2",
    "react-native-device-info": "^5.4.1",
    "react-native-elements": "^1.2.7",
    "react-native-freshchat-sdk": "^2.3.0",
    "react-native-gesture-handler": "^1.5.2",
    "react-native-in-app-notification": "^3.0.1",
    "react-native-keyboard-aware-scroll-view": "^0.9.1",
    "react-native-phone-input": "^0.2.4",
    "react-native-picker-select": "^6.3.3",
    "react-native-push-notification": "^3.1.9",
    "react-native-reanimated": "^1.4.0",
    "react-native-screens": "^1.0.0-alpha.23",
    "react-native-signature-capture": "^0.4.10",
    "react-native-vector-icons": "^6.6.0",
    "react-native-webview": "^8.0.3",
    "react-navigation": "^4.0.10",
    "react-navigation-stack": "^1.10.3"
  },
  "devDependencies": {
    "@babel/core": "^7.7.2",
    "@babel/runtime": "^7.7.2",
    "@react-native-community/eslint-config": "^0.0.5",
    "babel-jest": "^24.9.0",
    "babel-plugin-module-resolver": "^4.0.0",
    "chai": "^4.1.2",
    "chai-enzyme": "1.0.0-beta.0",
    "enzyme": "^3.3.0",
    "enzyme-adapter-react-16": "^1.1.1",
    "eslint": "^6.6.0",
    "jest": "^24.9.0",
    "jsdom": "15.2.1",
    "jsdom-global": "3.0.2",
    "metro-react-native-babel-preset": "^0.57.0",
    "react-dom": "^16.12.0",
    "react-test-renderer": "16.9.0",
    "sinon": "^7.2.2"
  },
  "jest": {
    "preset": "react-native",
    "setupFilesAfterEnv": [
      "./setUpTests.js"
    ],
    "transformIgnorePatterns": [
      "node_modules/(?!((jest-)?react-native|@react-native-firebase/database|@react-native-firebase/app|react-clone-referenced-element|expo(nent)?|@expo(nent)?/.*|react-navigation|@react-navigation/.*|sentry-expo|native-base))"
    ]
  }
}

您可以通过在mocks目录中创建模拟模块来模拟firebase数据库,如下所示:

jest.mock('@react-native-firebase/database', () => {
   return () => ({
     ref: jest.fn()
   })
 }); 
mkdir -p __mocks__/@react-native-firebase/database
touch index.js
并使用
index.js
中的jest模拟函数对firebase版本和数据库功能进行测试。大致如下:

const database = {
  functionality1: jest.fn(() => ({
    propertyExample1: jest.fn(() => Promise.resolve(true)),
    ...
  })),
  ...
  functionality2: jest.fn(() => ({
     property2: jest.fn(() => Promise.resolve(true)),...
  })),
};

export default database;

发生这种情况是因为库没有正确模拟本机发射器。在测试顶部添加以下代码段可以通过确保模块不为null来解决此问题

jest.mock('react-native/Libraries/EventEmitter/NativeEventEmitter');

Octavio有什么解决方案吗?