При модульном тестировании в Dart заглушки Mockito зависают при ожидании вызова

Я использую Mockito в Dart для тестирования асинхронного кода.

У меня есть этот класс с асинхронными вызовами:

      class StorageService {
  FirebaseStorage _storage;
  
  Future<bool> uploadMyImage(MyImage myImage) async {
    final path = "/${myImage.id}.jpg";

    try {
      await _storage.ref(path).putData(myImage.data);
      return true;
    } on Exception {
      return false;
    }
  }
}

Я пытаюсь проверить это так:

      @GenerateMocks([FirebaseStorage, Reference, UploadTask, TaskSnapshot])
void main() {
  test('uploadMyImage returns true on successful upload', () async {
    // 1. given
    final mockFirebaseStorage = MockFirebaseStorage();
    final subject = StorageService(firebaseStorage: mockFirebaseStorage);

    final myImage = Generators.myImage();
    final mockReference = MockReference();
    final mockUploadTask = MockUploadTask();
    final mockTaskSnapshot = MockTaskSnapshot();

    // 2. when
    final path = "/${myImage.id}.jpg";

    when(mockFirebaseStorage.ref(path)).thenReturn(mockReference);
    when(mockReference.putData(myImage.data)).thenAnswer((_) => mockUploadTask);
    when(await mockUploadTask).thenAnswer((_) => mockTaskSnapshot);

    final result = await subject.uploadMyImage(myImage);

    // 3. then
    expect(result, true);
  });
}

Модульный тест никогда не завершается, потому что он ожидает await mockUploadTask. Как мне его завершить?

0 ответов

Другие вопросы по тегам