質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

1回答

3188閲覧

react+firebaseのtestにjestを使った際にFirebaseErrorが起きる

kobaryo04ysh

総合スコア29

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/11/30 08:18

編集2020/11/30 08:21

前提・実現したいこと

jestを使ってコンポーネントのテストを行いたい

発生している問題・エラーメッセージ

firebaseとReactを使ってアプリを作成しているのですが、jestでコンポーネントのテストを行おうとした時に以下のエラーが発生しました。

console

1 FAIL src/components/HeaderRight.test.js 2 ● Test suite failed to run 3 4 FirebaseError: projectId must be a string in FirebaseApp.options 5 6 14 | }); 7 15 | 8 > 16 | export const db = firebase.firestore(); 9 | ^ 10 17 | export const auth = app.auth(); 11 18 | export const timestamp = firebase.firestore.FieldValue.serverTimestamp(); 12 19 | export default app; 13 14 at new FirestoreError (node_modules/@firebase/firestore/src/util/error.ts:216:5) 15 at Function.Object.<anonymous>.Firestore.databaseIdFromApp (node_modules/@firebase/firestore/src/api/database.ts:618:13) 16 at new Firestore (node_modules/@firebase/firestore/src/api/database.ts:378:36) 17 at node_modules/@firebase/firestore/index.node.ts:41:12 18 at Component.instanceFactory (node_modules/@firebase/firestore/src/config.ts:78:16) 19 at Provider.Object.<anonymous>.Provider.getOrInitializeService (node_modules/@firebase/component/src/provider.ts:194:33) 20 at Provider.Object.<anonymous>.Provider.getImmediate (node_modules/@firebase/component/src/provider.ts:95:29) 21 at FirebaseAppImpl.Object.<anonymous>.FirebaseAppImpl._getService (node_modules/@firebase/app/src/firebaseApp.ts:127:54) 22 at FirebaseAppImpl.firebaseAppImpl.<computed> [as firestore] (node_modules/@firebase/app/src/firebaseNamespaceCore.ts:228:29) 23 at Object.firestore (node_modules/@firebase/app/src/firebaseNamespaceCore.ts:209:46) 24 at Object.<anonymous> (src/firebase.jsx:16:28) 25 at Object.<anonymous> (src/components/HeaderRight.jsx:3:1) 26 at Object.<anonymous> (src/components/HeaderRight.test.js:3:1)

ログが少し長いですが上記の通りです。

エラーの起きたテストコードは以下です。

HeaderRight

1import React from "react"; 2import { render, screen } from "@testing-library/react"; 3 4//問題は他のファイルから何かコンポーネントをimportしようとすると上記のエラーがおきます。 5import { add } from "./HeaderRight"; 6 7describe("sum", () => { 8 test("sums up two values", () => { 9 const value = add(2 + 2); 10 expect(value).toBe(4); 11 }); 12});

今回はHeaderRight.jsxというファイルに適当に関数を作成してそれをimportしてテストを実行しようとしていましたが、上記のエラーがおきます。

HeaderRight.jsxから何か関数をimportせずに、例えば

describe("sum", () => { test("sums up two values", () => { expect(2 + 2).toBe(4); }); });

のようなテストを書けばpassします。

しかし、このpassするテストコードであっても、import { add } from "./HeaderRight";を追加すると、絶対に上記のエラーが起こります。

該当のソースコード

firebaseの設定を記載しているファイルは以下になります。

firebase

1import firebase from "firebase/app"; 2import "firebase/auth"; 3import "firebase/firestore"; 4import { firestore } from "firebase"; 5 6const app = firebase.initializeApp({ 7 apiKey: process.env.REACT_APP_FIREBASE_API_KEY, 8 authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN, 9 databaseURL: process.env.REACT_APP_FIREBASE_DATABASE_URL, 10 projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID, 11 storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET, 12 messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID, 13 appId: process.env.REACT_APP_FIREBASE_APP_ID, 14}); 15 16export const db = firebase.firestore(); 17export const auth = app.auth(); 18export const timestamp = firebase.firestore.FieldValue.serverTimestamp(); 19export default app;

試したこと

firebaseの環境変数は.envファイルを作成して記載しています。

今回、projectId must be stringという記述から.envファイルのREACT_APP_FIREBASE_PROJECT_IDの右辺を

REACT_APP_FIREBASE_PROJECT_ID="projectid"

という様に、projectidに" "を付けてみましたが変わらず。

補足情報(FW/ツールのバージョンなど)

package.jsonは以下になります

json

1{ 2 "name": "firebase-react-auth", 3 "version": "0.1.0", 4 "homepage": "./", 5 "private": true, 6 "jest": { 7 "testEnvironment": "jest-environment-jsdom-sixteen" 8 }, 9 "dependencies": { 10 "@babel/preset-env": "^7.12.7", 11 "@babel/preset-react": "^7.12.7", 12 "@material-ui/core": "^4.11.0", 13 "@material-ui/icons": "^4.9.1", 14 "@material-ui/lab": "^4.0.0-alpha.56", 15 "@testing-library/jest-dom": "^4.2.4", 16 "@testing-library/react": "^9.5.0", 17 "@testing-library/user-event": "^7.2.1", 18 "bootstrap": "^4.5.2", 19 "firebase": "^7.20.0", 20 "firebase-admin": "^9.3.0", 21 "react": "^16.13.1", 22 "react-bootstrap": "^1.3.0", 23 "react-dom": "^16.13.1", 24 "react-router-dom": "^5.2.0", 25 "react-scripts": "3.4.3", 26 "react-test-renderer": "^17.0.1", 27 "uuid": "^8.3.1", 28 "why-did-you-update": "^1.0.8" 29 }, 30 "scripts": { 31 "start": "react-scripts start", 32 "build": "react-scripts build", 33 "test": "jest", 34 "eject": "react-scripts eject", 35 "format": "prettier --write 'src/**/*.js'" 36 }, 37 "eslintConfig": { 38 "extends": "react-app" 39 }, 40 "browserslist": { 41 "production": [ 42 ">0.2%", 43 "not dead", 44 "not op_mini all" 45 ], 46 "development": [ 47 "last 1 chrome version", 48 "last 1 firefox version", 49 "last 1 safari version" 50 ] 51 }, 52 "devDependencies": { 53 "@babel/plugin-transform-react-jsx": "^7.12.7", 54 "@firebase/testing": "^0.20.11", 55 "babel-jest": "^26.6.3", 56 "enzyme": "^3.11.0", 57 "firebase-tools": "^8.15.1", 58 "jest": "^26.6.3", 59 "jest-environment-jsdom-sixteen": "^1.0.3", 60 "prettier": "^2.2.1" 61 } 62}

最後に

ググってみてもなかなか答えにたどり着けなかったので質問させていただきました。
もし、載せた情報以外に必要なものがあればコメントお願いします。

ご回答お待ちしています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Jestでdotenvを使う - Qiita
これが解決策な気がします

投稿2020/12/11 14:17

A_kirisaki

総合スコア2853

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問