Dio请求登录认证
Future<String?> authentication(String mobileNumber, String password, Dio dio) async {
dynamic data = {
"username": mobileNumber,
"password": password,
"grant_type": "password",
"client_id": "client_id"
};
try {
final response = await _dio.post(baseurl,
data: data,
options: Options(headers: {
"Content-Type": "application/x-www-form-urlencoded"
})); //'Authorization': 'Bearer $token
if (response.statusCode == 200) {
accessToken = response.data["access_token"];
refreshToken = response.data["refresh_token"];
Fluttertoast.showToast(msg: "Successfully Logged in");
return accessToken;
}
}on DioError catch (e) {
Fluttertoast.showToast(msg: "Something went wrong");
return e.toString();
}
return accessToken;
}
**单元测试**
MockDio mockDio = MockDio();
test("if authentication successfull token will return ", () async {
when(mockDio.post(Apiservices().baseurl)).thenAnswer((_)async =>*need return a response????*
);
expect(await service.authentication("username", "password", mockDio),
isA<String>());
});
我需要检查登录验证测试使用dio和mockit包。它将返回一个令牌。我不会嘲笑你。
请给出详细的例子。或者给我一些参考
试试这样:
test( 'Given: Fake login request with username and password,' 'When: Mock login API,' 'Then: Successful response from mock api', () async { // arrange when( mockDio.post( Apiservices().baseurl ), ).thenAnswer((realInvocation) async { return Response(jsonEncode(loginSuccessResponse), 200); //this will create a response for your api request }); // act, this will return a fake api response, we created above final resp = await _networkCallMock.post( Apiservices().baseurl ); // assert, actualResponse we mocked to get from api call, have a actual // response as expectedResponse, and compare it. final actualResponse = LoginResponse.fromJson(jsonDecode(resp.body)); final expectedResponse = LoginResponse.fromJson(loginSuccessResponse); expect( actualResponse, expectedResponse, ); });