// Author: fruit.com.cn import 'dart:convert'; import 'dart:typed_data'; import 'package:dio/dio.dart'; /// 假响应:[body] 会按 UTF-8 编码成字节,[statusCode] 默认 200。 class FakeHttpResponse { FakeHttpResponse(this.body, [this.statusCode = 200]); final String body; final int statusCode; } /// dio 的测试替身:把请求交给回调处理,全程不联网。 /// /// 顺带记录每个收到的请求,测试可以直接断言"发了几次、带了什么头"。 class FakeHttpAdapter implements HttpClientAdapter { FakeHttpAdapter(this.handler); final Future Function(RequestOptions options) handler; /// 按顺序记录收到的请求,用于断言请求次数与请求头。 final List requests = []; @override Future fetch( RequestOptions options, Stream? requestStream, Future? cancelFuture, ) async { requests.add(options); final response = await handler(options); return ResponseBody.fromBytes( utf8.encode(response.body), response.statusCode, headers: const { 'content-type': ['application/json; charset=utf-8'], }, ); } @override void close({bool force = false}) {} }