Используйте Mockito для вызова Riverpod AsyncValue во Flutter/Dart

Я тестирую код Flutter/Dart с поставщиком AsyncValue. Я использую пример Андреа почти буквально. Мой слушатель расширяет Mock, но когда я проверяю его, тест завершается неудачно с сообщением «Используется на объекте, отличном от Mockito».

О каком объекте, не являющемся мокито, идет речь? Мой слушатель — издеватель.

import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:riverpod/riverpod.dart';

// a generic Listener class, used to keep track of when a provider
// notifies its listeners
class Listener<T> extends Mock {
  void call(T? previous, T next);
}

void main() {
  group('GeoData', () {
    // This is a variation of Andrea's AuthController example minus the
    // extra mock'ed AuthRepository dependency.
    // https://codewithandrea.com/articles/unit-test-async-notifier-riverpod/
    test('initialization with default GeoInfo data', () {
      final container = ProviderContainer();
      addTearDown(container.dispose);
      final listener = Listener<AsyncValue<GeoInfo>>();

      container.listen(geoDataProvider, listener, fireImmediately: true);

      // ---> this is the line that fails the test with "Used on a non-mockito object"
      verify(() => listener(null, const AsyncData<GeoInfo>(GeoInfo.empty())));
      verifyNoMoreInteractions(listener);
    });
  });
}
'''
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
117
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, я потратил на это слишком много времени и прошел не одну кроличью нору, прежде чем нашел ее. Это не имеет ничего общего с неправильной инициализацией макета, а также с разницей между макетом и макетом 🤦‍♀️

Эти два пакета очень похожи, но синтаксис вызова проверки отличается.

Моктейль: verify(() => listener(null, const AsyncData<GeoInfo>(GeoInfo.empty())));

Мокито: verify(listener.call(null, const AsyncData<GeoInfo>(GeoInfo.empty()))).called(1);

Как только я изменил свой вызов на синтаксис Mockito, тест прошел, как и ожидалось.

Ух ты, ты сэкономил мне время. Большое спасибо.

Reza Esfandiari 10.07.2024 14:21

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