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

时间:2020-06-03 23:04:31

标签: flutter dart

我已经开发了一个软件包,并希望对其进行测试,以便进行网络通话。 众所周知,测试期间所有网络请求都将返回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));

}

我的URL运行正常。 但是它一直给我404。

如果需要,如何使用真实的HTTP客户端?

1 个答案:

答案 0 :(得分:0)

好吧,如果有人遇到像我这样的类似问题,请使用此技巧。

您将需要修改您的类,以使我们可以在运行时将HTTP客户端注入该类。我们将需要像这样修改测试用例。

import 'package:http/http.dart'; //client is from this pack
Client httpclinet = Client();
var a = MyPackage.makesAHTTPRequest(httpclient);

删除该Httpoverride.runzoned编码,您可以直接从Client包中传递http对象。 由于伪造的异步效应,某些测试用例将失败,但是您可以使用超时来管理这些用例。

您还需要删除所有此类语句: TestWidgetsFlutterBinding.ensureInitialized();

在我的情况下,当我使用包表示法从资产加载文件时,添加了这一行,我在本地引用了这些行,并在sureInitalized行上方也将其删除。 [实际上,我通过了标记,可以在测试过程中使用本地表示法,否则可以使用软件包表示法。]