问题描述
我使用两个库来制作流:native 和 getX。我为测试创建了两个组:native 和 getX,它们具有来自抽象类 (AnyPresenter
) 的相同契约。其中之一是 Stream<bool> get isLoadingStream
,对于本机是 _state.isLoading
,对于 getx 是 isLoading
。
Streams 仅在运行以下方法时发生变化:
本地:
Getx:
我对两者都使用相同的测试,但它在本机测试中没有正确运行。
预期结果: [真,假]
本机错误:
这是示例代码:
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',false]));
await sut.doSomething();
});
});
}
抱歉有任何错误。英语不是我的母语
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)