Flutter - Mockito Firestore ... get () - Метод 'document' был вызван в нуль - PullRequest
0 голосов
/ 27 февраля 2020

в учебных целях я пытаюсь смоделировать класс контроллера Firestore с помощью Mockito.

firestore_controller.dart

import 'package:cloud_firestore/cloud_firestore.dart';


class FirestoreController implements FirestoreControllerInterface {

  final Firestore firestoreApi;
  FirestoreController({this.firestoreApi});

  @override
  Future<DocumentSnapshot> read() async {
    final DocumentSnapshot document = await this.firestoreApi.collection('user').document('user_fooBar').get();
    return document;
  }
}

firestore_controller_test.dart

import 'package:flutter_test/flutter_test.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:mockito/mockito.dart';
import 'package:fooApp/Core/repositories/firebase/firestore_controller.dart';

class MockFirestoreBackend extends Mock implements Firestore {}
class MockDocumentSnapshot extends Mock implements DocumentSnapshot {}

void main() {
  TestWidgetsFlutterBinding.ensureInitialized();

  group("Firebase Controller", () {

    final Firestore firestoreMock = MockFirestoreBackend();
    final MockDocumentSnapshot mockDocumentSnapshot = MockDocumentSnapshot();
    FirestoreController sut;

    test("try to read a document", () async {

      // Arrange
      final Map<String, dynamic> _fakeResponse = {
        'foo': 123,
        'bar': 'foobar was here',
      };

      sut = FirestoreController(firestoreApi: firestoreMock); // INJECT MOCK

      // Arrange: Mock
      when(firestoreMock.collection('user').document('user_fooBar').get()).thenAnswer((_) => Future<MockDocumentSnapshot>.value(mockDocumentSnapshot));
      when(mockDocumentSnapshot.data).thenReturn(_fakeResponse);

      // Act
      final fakeDocument = await sut.read();

    });
  });
}

? Консольный вывод ?

NoSuchMethodError: The method 'document' was called on null.
Receiver: null
Tried calling: document("user_fooBar")

извините, если ошибка очевидна, это первый раз, когда я использовал Mockito Где моя ошибка? Что мне не хватает? Большое спасибо!

1 Ответ

0 голосов
/ 29 апреля 2020

попробуйте это:

https://pub.dev/packages/cloud_firestore_mocks

Тест, который я сделал, используя его:

class MockFirestore extends Mock implements Firestore {}
class MockDocument extends Mock implements DocumentSnapshot {}

void main() {
  final _tAppointmentModel = AppointmentModel(
    appointmentID: kAppointmentID,
    date: DateTime.parse("2020-12-05 20:18:04Z"),
    description: "test description",
    doctorID: kDoctorID,
    hospitalID: kHospitalID,
    infantID: kInfantID,
  );

  group('AppointmentModel tests: ', () {
    final tAppointmentID = kAppointmentID;
    final tInfantID = kInfantID;
    final tDoctorID = kDoctorID;
    final tHospitalID = kHospitalID;

    test('should be a subclass of Appointment', () async {
      expect(_tAppointmentModel, isA<Appointment>());
    });

    test('store and retrieve document from Firestore', () async {
      final instance = MockFirestoreInstance();
      await instance.collection('appointments').add({
        'appointmentID': tAppointmentID,
        'date': DateTime.parse("2020-12-05 20:18:04Z"),
        'description': "test description",
        'doctorID': tDoctorID,
        'hospitalID': tHospitalID,
        'infantID': tInfantID,
      });

      final snapshot = await instance.collection('appointments').getDocuments();
      final String expected = _tAppointmentModel.props[0];
      final String result = snapshot.documents[0].data['appointmentID'];
      expect(expected, result);
    });
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...