大佬教程收集整理的这篇文章主要介绍了在 Flutter 中的 Bloc 中测试 API 调用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我第一次尝试为 Bloc 编写测试, 在这里我面临的问题是:
NoSuchMethodError: The method 'fetchPlayerTologin' was called on null.
Receiver: null
TrIEd calling: fetchPlayerTologin("test.m98@gmail.com","test123!")
dart:core Object.noSuchMethod
test/login_bloc_test.dart 31:35 main.<fn>.<fn>
package:bloc_test/src/bloc_test.dart 160:26 runBlocTest.<fn>
package:bloc_test/src/bloc_test.dart 158:5 runBlocTest.<fn>
dart:async runZoned
package:bloc_test/src/bloc_test.dart 157:9 runBlocTest
package:bloc_test/src/bloc_test.dart 127:11 blocTest.<fn>
package:bloc_test/src/bloc_test.dart 126:26 blocTest.<fn>
===== asynchronous gap ===========================
dart:async _completeOnAsyncError
package:bloc_test/src/bloc_test.dart runBlocTest.<fn>
package:bloc_test/src/bloc_test.dart 158:5 runBlocTest.<fn>
dart:async runZoned
package:bloc_test/src/bloc_test.dart 157:9 runBlocTest
package:bloc_test/src/bloc_test.dart 127:11 blocTest.<fn>
package:bloc_test/src/bloc_test.dart 126:26 blocTest.<fn>
但是用户存在于数据库中,您知道问题出在哪里吗?
这是我的整体测试
class mockPlayerRepository extends mock implements PlayerRepository {}
voID main() {
mockPlayerRepository mockPlayerRepository;
setUp() {
mockPlayerRepository = mockPlayerRepository();
}
blocTest(
'Login button pressed',build: () {
when(mockPlayerRepository.fetchPlayerTologin(
'test.m98@gmail.com','test123!'))
.thenAnswer((_) async => player);
return LoginBloc(repository: mockPlayerRepository);
},act: (bloC) => bloc.add(const LoginEvent.loginbutton()),expect: [
LoginState(
email: EmailAddress('test.m98@gmail.com'),password: password('test123!'),isLoading: falsE),LoginState(
email: EmailAddress('test.m98@gmail.com'),isLoading: truE),],);
});
}
我的集团是
class LoginBloc extends Bloc<LoginEvent,LoginState> {
final PlayerRepository repository;
// ignore: sort_constructors_first
LoginBloc({@required this.repository})
: assert(repository != null),super(LoginState.initial());
@overrIDe
Stream<LoginState> mapEventToState(
LoginEvent event,) async* {
yIEld* event.map(emailChanged: (E) async* {
yIEld state.copyWith(
email: EmailAddress(e.email),);
},passwordChanged: (E) async* {
yIEld state.copyWith(
password: password(e.password),loginbutton: (E) async* {
yIEld state.copyWith(isLoading: truE);
if (state.email.isValID() && state.password.isValID()) {
final String email = unpack(state.email.value.toIterable().toString());
final String password =
unpack(state.password.value.toIterable().toString());
final Player player =
await repository.fetchPlayerTologin(email,password);
yIEld state.copyWith(
player: player,isLoading: false,);
}
});
}
}
使用邮递员检查API调用工作完美,函数本身是
class PlayerRepository extends PlayerAPIProvIDer {
// fetchPlayerTologin function required to return player if login and password are correct and null if any error occurs
Future<Player> fetchPlayerTologin(String email,String password) async =>
await login(email,password);
}
class PlayerAPIProvIDer {
//Function for user to Login
Future<Player> login(String email,String password) async {
try {
final http.Response response = await http.patch(
'$octollengeURL/login',headers: <String,String>{
'Content-Type': 'application/Json','Accept-EnCoding': 'application/Json',},body: JsonEncode(<String,String>{
'email': email,'password': password,}),);
if (response.statusCode == 200) {
return Player.fromJson(response.body);
} else if (response.statusCode == 400) {
showSnack('User is not registered',errcolor,colors.whitE);
return null;
} else if (response.statusCode == 403) {
showSnack('password is incorrect',colors.whitE);
return null;
} else {
showSnack('Server error with status code : ${response.statusCodE}',colors.whitE);
return null;
}
} on SocketException {
showSnack('No internet Connection',colors.whitE);
return null;
} on httpException {
showSnack(
'Think we have troubles on server sIDe',colors.whitE);
return null;
} on FormatException {
showSnack(
'You got bad response format,try again',colors.whitE);
return null;
} catch (E) {
logger.e(e.toString());
showSnack(
'Think we have troubles on server sIDe',colors.whitE);
return null;
}
}
}
用于将函数的输入更改为'any'关键字但仍然存在相同问题 如果您需要更多信息,我可以提供
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的在 Flutter 中的 Bloc 中测试 API 调用全部内容,希望文章能够帮你解决在 Flutter 中的 Bloc 中测试 API 调用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。