我正在使用两个库来制作流:native 和 getX。我创建了两个测试组:native 和 getX,它们具有来自抽象类 ( AnyPresenter
) 的相同契约。其中之一是Stream<bool> get isLoadingStream
which 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();
});
});
}
抱歉有任何错误。英语不是我的母语