如何在Flatter中模拟Firebase实时数据库?

如何在Flatter中模拟Firebase实时数据库?,firebase,flutter,firebase-realtime-database,Firebase,Flutter,Firebase Realtime Database,在做其他事情之前,我想澄清一下,我问的是Firebase实时数据库,而不是Firestore 背景: 我有一个同时使用Firestore和Firebase实时数据库的应用程序。我找到了一种单元测试Firestore的方法,通过使用at dart pub模拟Firestore。到目前为止,我一直在尝试搜索Firebase实时数据库是否有任何等价物,但我没有看到任何等价物。这里和谷歌 所以我的问题是,如何才能创建一个需要模拟FirebaseDatabase实例的单元测试?类似于您在模拟firesto

在做其他事情之前,我想澄清一下,我问的是
Firebase实时数据库
,而不是
Firestore

背景:

我有一个同时使用Firestore和Firebase实时数据库的应用程序。我找到了一种单元测试Firestore的方法,通过使用at dart pub模拟Firestore。到目前为止,我一直在尝试搜索Firebase实时数据库是否有任何等价物,但我没有看到任何等价物。这里和谷歌

所以我的问题是,如何才能创建一个需要模拟FirebaseDatabase实例的单元测试?类似于您在模拟firestore软件包中所做的操作,以便我可以执行以下操作:

MockDbInstance mockFirebaseDatabaseInstance=mockFirebaseDatabaseInstance();
等待mockFirebaseDatabaseInstance.reference().child(“此节点”).setValue(myObject);
更新:

我们无法找到轻松测试RTDB的方法,因此我们决定将所有数据移动到FireStore。

我编写了一个模拟firebase实时数据库的包,但它不完整,不支持事件模拟 就像以前的孩子一样,但这是可行的。下面是一个使用的示例:

import'包:firebase_数据库/firebase_数据库.dart';
导入“包:firebase_数据库_mocks/firebase_数据库_mocks.dart”;
进口“包装:颤振试验/颤振试验.dart”;
类用户存储库{
UserRepository(this.firebaseDatabase);
FirebaseDatabase FirebaseDatabase;
未来的getUserName(字符串userId)异步{
最终用户名引用=
firebaseDatabase.reference().child('users').child(userId).child('name');
final dataSnapshot=wait usernameference.once();
返回dataSnapshot.value;
}
未来的getUser(字符串userId)异步{
final userNode=firebaseDatabase.reference().child('users/$userId');
final dataSnapshot=await userNode.once();
返回dataSnapshot.value;
}
}
void main(){
FirebaseDatabase FirebaseDatabase;
用户存储库用户存储库;
//放假数据
const userId='userId';
const userName='Elon musk';
常量伪造数据={
“用户”:{
用户标识:{
“名称”:用户名,
“电子邮件”:“麝香”。email@tesla.com',
'photoUrl':'url to photo.jpg',
},
“其他用户ID”:{
'名称':'用户名',
'电子邮件':'其他麝香。email@tesla.com',
“photoUrl”:“other_url-to-photo.jpg”,
}
}
};
MockFirebaseDatabase.instance.reference().set(fakeData);
设置((){
firebaseDatabase=MockFirebaseDatabase.instance;
userRepository=userRepository(firebaseDatabase);
});
测试('Should get userName…',()异步{
final userNameFromFakeDatabase=await userRepository.getUserName(userId);
expect(userNameFromFakeDatabase,等于(userName));
});
测试('Should get user…',()异步{
final userNameFromFakeDatabase=await userRepository.getUser(userId);
期待(
用户名来自FakeDatabase,
相等于({
“名称”:用户名,
“电子邮件”:“麝香”。email@tesla.com',
'photoUrl':'url to photo.jpg',
}),
);
});
}

如果有人在寻找解决方案,我们最终会一直使用Firestore。