Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Firebase Cloud Firestore进行单元测试方法?_Firebase_Dart_Flutter_Google Cloud Firestore_Flutter Test - Fatal编程技术网

如何使用Firebase Cloud Firestore进行单元测试方法?

如何使用Firebase Cloud Firestore进行单元测试方法?,firebase,dart,flutter,google-cloud-firestore,flutter-test,Firebase,Dart,Flutter,Google Cloud Firestore,Flutter Test,我正在尝试在Flitter上使用CloudFireStore。到目前为止,我已经能够使用它,但我想在我的项目中包括使用firestore的函数的单元测试。我正在利用Mockito做同样的事情,我认为它应该会起作用 但我真的被Dart的流线型匹配器难住了。我无法理解错误消息 下面是一些我试图实现的代码和我得到的错误 存储库.dart 导入'dart:async'; 导入“包:cloud_firestore/cloud_firestore.dart”; 导入“包:sunapsis_conferenc

我正在尝试在Flitter上使用CloudFireStore。到目前为止,我已经能够使用它,但我想在我的项目中包括使用firestore的函数的单元测试。我正在利用Mockito做同样的事情,我认为它应该会起作用

但我真的被Dart的流线型匹配器难住了。我无法理解错误消息

下面是一些我试图实现的代码和我得到的错误

存储库.dart

导入'dart:async';
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“包:sunapsis_conference18/models/conference_event.dart”;
流getAllEvents(){
返回火场
.collection(_collectionName)
.快照()
.map((QuerySnapshot快照)=>\u事件映射器(快照));
}
列表\u事件映射器(QuerySnapshot快照){
列出事件=[];
对于(int i=0;i
它试图从firestore集合中获取数据,并返回数据对象列表流

存储库\u测试。dart

导入'dart:async';
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“package:mockito/mockito.dart”;
导入“包:sunapsis_conference18/models/conference_event.dart”;
导入“package:sunapsis_conference18/repository/repository.dart”//引号修复
导入“包:test/test.dart”;
类MockDocumentReference扩展了Mock实现DocumentReference{}
类MockFirestore扩展了Mock实现Firestore{}
类MockCollectionReference扩展了Mock实现CollectionReference{}
类MockQuerySnapshot扩展了Mock实现QuerySnapshot{}
类MockDocumentSnapshot扩展了Mock实现DocumentSnapshot{}
类MockQuery扩展Mock实现查询{}
main(){
组('getAllEvents()测试',(){
最终Firestore mockFirestore=mockFirestore();
最终收集参考mockCollectionReference=
MockCollectionReference();
最终QuerySnapshot mockQuerySnapshot=mockQuerySnapshot();
final DocumentSnapshot mockDocumentSnapshot=mockDocumentSnapshot();
最终存储库=存储库(mockFirestore);
最终文档参考_mockDocumentRef=MockDocumentReference();
最终映射_响应映射={
“福”:123,
“栏”:“测试标题”,
};
最终ConferenceEvent _event=ConferenceEvent.buildFromMap(_responseMap);
test('返回ConferenceEvent列表的正确流',()异步{
何时(mockFirestore.collection('events'))
.然后返回(mockCollectionReference);
何时(mockCollectionReference.snapshots())
.thenAnswer(()=>Stream.fromIterable([mockQuerySnapshot]);
when(mockQuerySnapshot.documents)。然后返回([mockDocumentSnapshot]);
when(mockDocumentSnapshot.data)。然后返回(\u responseMap);
待会儿(
repository.getAllEvents(),
埃米特桑约夫([
[u事件],
发射体
]));
});
});
}
我无法制定正确的流匹配器,同时也无法理解错误消息

错误

Expected: should do one of the following:
          • emit an event that [Instance of 'ConferenceEvent']
          • be done
  Actual: <Instance of '_MapStream<QuerySnapshot, List<ConferenceEvent>>'>
   Which: emitted • [Instance of 'ConferenceEvent']
                  x Stream closed.
            which failed all options:
                  • failed to emit an event that [Instance of 'ConferenceEvent'] because it emitted an event that was <Instance of 'ConferenceEvent'> instead of <Instance of 'ConferenceEvent'> at location [0]
                  • failed to be done
预期:应执行以下操作之一:
•发出[ConferenceEvent'实例]的事件
•完成
实际:
其中:发出•[ConferenceEvent'实例]
x流关闭。
所有选项均失败:
•未能发出[ConferenceEvent'实例]发生的事件,因为它发出的事件不是在位置[0]发生的
•未能完成

任何有助于理解错误信息的指导都将不胜感激。另外,这是测试此功能的正确方法吗?

我认为问题与比较
ConferenceEvent
实例的方式有关。它使用(equal)操作符来比较这两个对象,并且在不覆盖
ConferenceEvent
中的equal操作符的情况下,这些对象将不会具有相同的属性

在模拟代码中,这里实例化了一个新对象

ConferenceEvent event =
          ConferenceEvent.buildFromMap(documentSnapshot.data);
然后将其与此行中创建的另一个
ConferenceEvent
对象进行比较:

final ConferenceEvent _event = ConferenceEvent.buildFromMap(_responseMap);

你能从测试文件的顶部添加导入吗?@GünterZöchbauer,我已经添加了导入。读了你的评论后,我认为这是一个导入问题,并尝试再次添加导入,但没有解决。非常感谢你调查这件事。看起来不错。不知道是什么原因造成的。现在我很担心,因为我很确定你能帮上忙
未能发出一个事件,[ConferenceEvent'的实例],因为它发出的事件不是在位置[0]处发出的。
这没有多大意义,尤其是
位置[0]
部分。下面是一个如何对Cloud Firestore dart代码进行单元测试的示例,这可能会有所帮助:我遇到了类似的问题,此解决方案也有效。我只需要重写==运算符和哈希代码。