reactjs - 为什么我的 firebase 模拟器 get-call 承诺无法在开玩笑的单元测试中解决
问题描述
- 使用 react with firestore 作为我作为本地模拟器运行的数据库。
- 使用 jest 的 react-script 测试进行测试。
现在,当在浏览器中从我的 react 应用程序调用 firestore set() 和 get() 函数时,一切正常。但是当对这些相同的调用进行单元测试时,只有 set() 承诺会解决。get() 承诺永远不会解决(“超过 5000 毫秒的测试超时。[我测试超时 > 100000000])模拟器接收到 get() 请求没有任何问题。(它被记录在模拟器的请求选项卡中)
这是一个简单的测试,可以隔离我的问题。
import { firestore } from '../firebase';
it('Gets from Firestore', async () => {
try {
await firestore.collection("users").doc("testUser").set({ name: "Frank" })
await firestore.collection("users").doc("testUser").get()
expect(1).toBe(1);
} catch (err) {
console.log(err)
}
})
Firestore 初始化(不包括凭据):
import firebase from "firebase/app";
import 'firebase/firestore';
import 'firebase/auth';
const firebaseConfig = {
apiKey: "",
authDomain: "",
projectId: "",
storageBucket: "",
messagingSenderId: "",
appId: "",
measurementId: ""
};
firebase.initializeApp(firebaseConfig);
const firestore = firebase.firestore();
if (window.location.hostname === "localhost") {
firestore.useEmulator("localhost", 8080);
}
export {firestore}
export default firebase;
解决方案
在角度应用程序中,我遇到了相同的超时错误。似乎测试环境设置不正确,并且缺少一些 polyfill。
我通过在 *.spec 文件的顶部包含以下内容解决了这个问题
import 'core-js';
我还有另一个问题,Angular JIT 会在测试堆栈中的某些包含的模块/组件上失败,我通过将其包含在同一个 *.spec 文件中解决了这个问题
import "@angular/compiler";
老问题,但希望这对我未来有所帮助。
推荐阅读
- windows - 命名空间“winrt::Windows::Foundation::EventRegistrationToken”没有成员“EventRegistrationToken”
- r - 将 %dopar% 用于嵌套的 for 循环以查找 R 中的最小距离
- stm32 - STM32L4 - HAL_I2C_STATE_BUSY_RX 问题
- qt - 使用 osm 插件在 qml 地图中缩放级别
- nearprotocol - “genesis_height”块是 NEAR 协议中的特殊块吗?
- python - Fuzzywuzzy 用于字典列表
- android - Android 应用程序挂起 HttpUrlConnection 请求
- html - 如何在表格中对齐标题?
- css - 提取背景网址