如何在颤振小部件测试中发出 http 请求?

Posted

技术标签:

【中文标题】如何在颤振小部件测试中发出 http 请求?【英文标题】:How to make a http request in a flutter widget test? 【发布时间】:2018-06-21 00:01:39 【问题描述】:

我正在尝试从 Flutter 小部件测试中发出 HTTP 请求,但由于某种原因,小部件测试总是在 5 秒后超时,而在单元测试中它工作得非常好。

import 'package:flutter_test/flutter_test.dart';
import 'dart:io';
import 'dart:convert';

void main() 
  test('http unit-test works', () async 
    var httpClient = new HttpClient();
    var request = await httpClient.getUrl(Uri.parse('https://api.ipify.org/'));
    var response = await request.close();
    var responseBody = await response.transform(UTF8.decoder).join();
    print('BODY: $responseBody');
  );

  testWidgets('http widget-test does not work', (WidgetTester tester) async 
    var httpClient = new HttpClient();
    var request = await httpClient.getUrl(Uri.parse('https://api.ipify.org/'));
    var response = await request.close();
    var responseBody = await response.transform(UTF8.decoder).join();
    print('BODY: $responseBody');
  );

flutter 测试环境是否在这里吃掉了我的 HTTP 请求?我怎样才能防止它这样做?

【问题讨论】:

为什么要在测试中发出 HTTP 请求?你不想嘲笑它吗? 当然。但问题是我的应用程序/测试在尝试访问本地 mock-http-server 时超时。 见***.com/questions/49166234/… @QuirijnGB 如果我的服务器中有单独的 live 和 mock 环境,我想在 Flutter 测试期间使用 mock 环境怎么办? 【参考方案1】:

如果问题的原因是您提到的超时,我建议在测试期间尝试不同的网络。 WidgetTester 不应导致 Flutter 单元测试中的 HTTP 请求出现问题。我尝试了提供的重现,但它在我的测试中运行良好。

作为参考,这是我正在运行的 Flutter 版本:Flutter version 1.26.0-2.0.pre.281

【讨论】:

以上是关于如何在颤振小部件测试中发出 http 请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤振小部件测试中捕获来自未来的错误?

颤振小部件测试 - 如何执行“返回上一个屏幕”的测试

如何在颤振小部件中使用条件语句/三元

颤振:单击该小部件内的按钮后如何将小部件更改为另一个小部件

如何创建自定义颤振 sdk 小部件,重建颤振和使用新的小部件

如何在颤振中创建以下小部件