0

我正在使用两个库来制作流:native 和 getX。我创建了两个测试组:native 和 getX,它们具有来自抽象类 ( AnyPresenter) 的相同契约。其中之一是Stream<bool> get isLoadingStreamwhich for native is_state.isLoading和 for getx is isLoading

流仅在运行以下方法时发生变化:

本国的:

在此处输入图像描述

获取:

在此处输入图像描述

我对两者都使用了相同的测试,但它在本机测试中运行不正确。

预期结果:[真,假]

本机错误: 在此处输入图像描述

这是示例代码:

import 'dart:async';

import 'package:get/get.dart';
import 'package:test/test.dart';
import 'package:mockito/mockito.dart';

class AnyState {
  bool isLoading = false;
}

abstract class AnyPresenter {
  Stream<bool> get isLoadingStream;

  void doSomething();
}

class StreamAnyPresenter implements AnyPresenter {
  final AnyLibrary anyLibrary;

  var _controller = StreamController<AnyState>.broadcast();
  var _anyState = AnyState();

  StreamAnyPresenter(this.anyLibrary);

  Stream<bool> get isLoadingStream =>
      _controller.stream.map((anyState) => anyState.isLoading).distinct();

  Future<void> doSomething() async {
    _anyState.isLoading = true;
    _controller.add(_anyState);
    _anyState.isLoading = false;
    _controller.add(_anyState);
  }
}

class GetXPresenter implements AnyPresenter {
  final AnyLibrary anyLibrary;

  var isLoading = false.obs;

  GetXPresenter(this.anyLibrary);

  Stream<bool> get isLoadingStream => isLoading.stream.distinct();

  Future<void> doSomething() async {
    isLoading.value = true;
    isLoading.value = false;
  }
}

abstract class AnyLibrary {
  Future<void> someMethod();
}

class AnyLibrarySpy extends Mock implements AnyLibrary {}

void main() {
  AnyLibrarySpy anyLibrary;
  setUp(() {
    anyLibrary = AnyLibrarySpy();
  });

  group('Using native Stream', () {
    StreamAnyPresenter sut;

    setUp(() {
      sut = StreamAnyPresenter(anyLibrary);
    });

    test('Should emit events on Success', () async {
      expectLater(sut.isLoadingStream, emitsInOrder([true, false]));

      await sut.doSomething();
    });
  });

  group('Using getX', () {
    GetXPresenter sut;

    setUp(() {
      sut = GetXPresenter(anyLibrary);
    });

    test('Should emit events on Success', () async {
      expectLater(sut.isLoadingStream, emitsInOrder([true, false]));

      await sut.doSomething();
    });
  });
}

抱歉有任何错误。英语不是我的母语

4

0 回答 0