目前我正在测试200个响应,如下所示
final dio = Dio();
final dioAdapter = DioAdapter();
dio.httpClientAdapter = dioAdapter;
const path = 'https://endpoint.com';
test('Loading shows when user taps set up trading account', () async {
dioAdapter
..onPost(
path,
(request) => request.reply(204, {}),
);
final onGetResponse = await dio.post(path);
when(_tradingAccountService.setUpTradingAccount())
.thenAnswer((realInvocation) => Stream.value(HttpResponse(onGetResponse.data, onGetResponse)));
await signUpViewModel.setUpTradingAccount();
expect(signUpViewModel.isSettingUpTradingAccount, true);
});
但是当我尝试测试401或500时,dio抛出了HttpStatusError
final dioError = DioError(
error: {'message': 'Some beautiful error!'},
requestOptions: RequestOptions(path: '/foo'),
response: Response(
statusCode: 500,
requestOptions: RequestOptions(path: '/foo'),
),
type: DioErrorType.response,
);
dioAdapter.onPost(
path,
(request) => request.throws(500, dioError),
);
我希望能做这样的事情
when(_tradingAccountService.setUpTradingAccount())
.thenAnswer((realInvocation) => Stream.value(HttpResponse(204)));
这些对How create test for dio timeout和https://github.com/flutterchina/dio/blob/master/dio/test/mock_adapter.dart都没有帮助
发布于 2021-05-24 10:09:43
使用http_mock_adapter,用于模拟Dio
请求的包。
您可以简单地将注入的Dio
的httpClientAdapter
替换为DioAdapter()
of http_mock_adapter
来自http_mock_adapter的examples的示例
用法
以下是该包的基本使用场景(通过DioAdapter
):
import 'package:dio/dio.dart';
import 'package:http_mock_adapter/http_mock_adapter.dart';
void main() async {
final dio = Dio();
final dioAdapter = DioAdapter();
dio.httpClientAdapter = dioAdapter;
const path = 'https://example.com';
dioAdapter
..onGet(
path,
(request) => request.reply(200, {'message': 'Successfully mocked GET!'}),
)
..onGet(
path,
(request) => request.reply(200, {'message': 'Successfully mocked POST!'}),
);
final onGetResponse = await dio.get(path);
print(onGetResponse.data); // {message: Successfully mocked GET!}
final onPostResponse = await dio.post(path);
print(onPostResponse.data); // {message: Successfully mocked POST!}
}
注意:
There是一个修复的问题,请看一看那里,我想它会有帮助。
https://stackoverflow.com/questions/67332840
复制