Проблема с .addError в потоках getX

#flutter #dart #testing #stream #flutter-getx

Вопрос:

Ошибка:

 NoSuchMethodError: Closure call with mismatched arguments: function '_ExpectedFunction.max1'
Receiver: Closure: ([Object?]) => void from Function 'max1':.
Tried calling: _ExpectedFunction.max1("Algo errado aconteceu. Tente novamente em breve.", Instance of '_StringStackTrace')
Found: _ExpectedFunction.max1([Object?]) => T
dart:core                                                                 _objectNoSuchMethod
GetStream._notifyError
package:get/…/rx_stream/get_stream.dart:60
GetStream.addError
package:get/…/rx_stream/get_stream.dart:104
GetxSurveysPresenter.loadData
package:fordev/…/presenters/getx_surveys_presenter.dart:31
main.<fn>
test…presentersget_surveys_presenter_test.dart:89
main.<fn>
test…presentersget_surveys_presenter_test.dart:82
 

Я не понимаю, почему тест не работает!
Я пробовал в этих двух формах и не работает!

   test('Should emit correct events on failure', () async {
    // arrange
    mockLoadSurveysError();
    // assert
    sut.surveysStream.listen(null, onError: expectAsync1((error) =>
      expect(error, 
       StackTrace.fromString(UIError.unexpected.description))));
    // act
    await sut.loadData();
  });

  test('Should emit correct events on failure', () async {
    // arrange
    mockLoadSurveysError();
    // assert
    sut.surveysStream.listen(null, onError: expectAsync1((error) =>
      expect(error, UIError.unexpected.description)));
    // act
    await sut.loadData();
  });
 

Я думаю, что причиной является StackTrace.empty.

 class GetxSurveysPresenter implements SurveysPresenter {
  final LoadSurveys loadSurveys;

  GetxSurveysPresenter({@required this.loadSurveys});

  final _surveys = Rx<List<SurveyViewModel>>(null);

  Stream<List<SurveyViewModel>> get surveysStream => _surveys.stream;

  Future<void> loadData() async {
    try {
      final surveys = await loadSurveys.load();
      _surveys.value = surveys
        .map((survey) => SurveyViewModel(
          id: survey.id, 
          question: survey.question, 
          date: DateFormat('dd MMM yyyy').format(survey.dateTime), 
          didAnswer: survey.didAnswer
        )).toList();
    } on DomainError {
      _surveys.subject.addError(UIError.unexpected.description, StackTrace.empty);
    }
  }
}
 

Ошибка: https://i.stack.imgur.com/5UKVh.png

Проверенный код: https://i.stack.imgur.com/PSw7T.png

Ответ №1:

 test('Should emit correct events on failure', () async {
  // arrange
  mockLoadSurveysError();
  // assert
  sut.surveysStream.listen(null, onError: expectAsync2((error, stack) =>
    expect(error, UIError.unexpected.description)));
  // act
  await sut.loadData();
});