首页 > 解决方案 > 测试反应组件时获取`TypeError:_firebase.database.tasks.orderBy不是函数`

问题描述

TypeError: _firebase.database.tasks.orderBy is not a function测试从 firebase 获取和显示数据的组件时出现错误。这是我用来发出 Firestore 请求的钩子

    useEffect(() => {
    setLoading(true);
    const unsubscribe = database.tasks
      .orderBy("createdAt", "desc")
      .limit(4)
      .onSnapshot(
        (documentSnapshot) => {
          const formattedTasks = [];
          documentSnapshot.docs.forEach((doc) => {
            formattedTasks.push(database.formatDocument(doc));
          });
          dispatch({
            type: "SET_LATEST_TASKS",
            payload: formattedTasks,
          });
          console.log(formattedTasks);
          setLoading(false);
        },
        (error) => {
          setLoading(false);
          console.log(error);
        }
      );
    return unsubscribe;
  })

这就是我在测试文件中模拟firebase函数的方式

jest.mock("../../../firebase", () => ({
  database: {
    tasks: jest.fn(() => ({
      orderBy: jest.fn(),
      limit: jest.fn(),
      onSnapshot: jest.fn(() => Promise.resolve("resolved")),
    })),
  },
}));

这是我要模拟的firebase文件

const firebaseConfig = {
  apiKey: process.env.REACT_APP_FIREBASE_API_KEY,
  authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN,
  projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
  storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,
  messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID,
  appId: process.env.REACT_APP_FIREBASE_APP_ID,
};

const app = firebase.initializeApp(firebaseConfig);
const firestore = app.firestore();
const auth = app.auth();
const storage = app.storage();

const database = {
  users: firestore.collection("users"),
  activities: firestore.collection("activities"),
  tasks: firestore.collection("project-tasks"),
  formatDocument: (doc) => {
    return { id: doc.id, ...doc.data() };
  },
  timestamp: firebase.firestore.FieldValue.serverTimestamp(),
};

export { auth, storage, database };

标签: reactjsfirebasereact-testing-library

解决方案


推荐阅读