reactjs - 测试反应组件时获取`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 };
解决方案
推荐阅读
- java - 在 spark Dataset s 可以作为输入 args 传递给函数以输出函数的 args 吗?
- javascript - 将可配置的 appInsights 密钥传递给 javascript (react/angular) 应用程序
- 3d - 使用低质量 GPU 的 Maya 3d 模型
- shell - 如何删除在unix文件中的两个位置具有两个模式的行
- html - 两个 CSS 网格未在同一个父容器内对齐
- r - R:R中的世界银行数据与导出到csv之间的数据不一致
- r - 为向量元素分配与前一个匹配值相关的值
- python - GP 回归模型为所有测试输入预测非常相似的数字
- java - Spring Boot在包含签名的jar文件时启动缓慢
- marklogic - 数组的 TDE 标量类型