我已经开发了一个软件包,并希望对其进行测试,以便进行网络通话。 众所周知,测试期间所有网络请求都将返回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客户端?
答案 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行上方也将其删除。 [实际上,我通过了标记,可以在测试过程中使用本地表示法,否则可以使用软件包表示法。]