我在颤振中开发了一个软件包,并想对其进行测试,该软件包会进行网络调用。 众所周知,所有网络请求在测试时都会返回404,这样的HTTP请求需要被模拟。 但是,也可以使用原始HTTP客户端而不是模拟或获取404。 https://github.com/flutter/flutter/issues/19086#issuecomment-402639134
我们如何做到这一点?
我试过这个:
main(){
TestWidgetsFlutterBinding.ensureInitialized();
HttpOverrides.runZoned(() {
test("Case1: Make HTTP request to an actual server", ()async{
let a = MyPackage.makesAHTTPRequest();
expect(a,"hello world");
});
}, createHttpClient: (SecurityContext c) => new HttpClient(context: c));
}
我的网址工作正常。 但它一直给我404。
如果需要,如何使用真正的HTTP客户端?
好的,所以如果有人像我一样面临类似的问题,请使用这个技巧。
您将需要修改您的类,以便我们可以在运行时将 HTTP 客户端注入其中。我们需要修改我们的测试用例。
import 'package:http/http.dart'; //client is from this pack
Client httpclinet = Client();
var a = MyPackage.makesAHTTPRequest(httpclient);
删除该 Httpoverride.runzoned cod,您可以直接从http
包中传递Client
对象。 由于虚假的异步效应,某些测试用例会失败,但您可以使用超时来管理这些效果。
您还需要删除任何此类语句:TestWidgetsFlutterBinding.ensureInitialized();
就我而言,我在从资产加载文件时添加了此行,使用包表示法,我在本地引用它们并在 ensureInitalized 行上方删除。[实际上我传递了标志以在测试期间使用本地表示法,否则使用包表示法]