颤振测试,通过实际的HTTP客户端,而不是模拟的客户端



我在颤振中开发了一个软件包,并想对其进行测试,该软件包会进行网络调用。 众所周知,所有网络请求在测试时都会返回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 行上方删除。[实际上我传递了标志以在测试期间使用本地表示法,否则使用包表示法]

最新更新