尝试测试异步 Dart ajax HttpRequest 时出错

Posted

技术标签:

【中文标题】尝试测试异步 Dart ajax HttpRequest 时出错【英文标题】:Error when trying to test an async Dart ajax HttpRequest 【发布时间】:2016-08-25 14:01:29 【问题描述】:

这个问题是这个问题的简化版:Testing dart ajax HttpRequest

我基本上删除了所有不必要的代码,只留下了测试和HttpRequest.postFormData 调用。

问题:测试似乎没有等到 Future 完成。 测试代码:

# http_report_adapter_test.dart

import "package:test/test.dart";
import 'dart:html';

void main() 

  test("sends an ajax request and acknowledges a 200 response from the server", () 
    var f = HttpRequest.postFormData("http://localhost:4567/errors",  'hello': 'world');
    f.then((_) => print("!!!!!!!"));
    return f;
  );


根据建议,我 return f 并且测试应该等到 Future 完成。但是,这是我得到的输出:

~/Work/my_libs/dart/logmaster master$ dtest-d -n "sends an ajax request and acknowledges a 200 response from the server"
00:05 +0 -1: test/http_report_adapter_test.dart: sends an ajax request and acknowledges a 200 response from the server
  [object XMLHttpRequestProgressEvent]
  dart:html                            HttpRequest.postFormData
  http_report_adapter_test.dart 14:25  main.<fn>

  [object XMLHttpRequestProgressEvent]
  dart:html                            HttpRequest.postFormData
  http_report_adapter_test.dart 14:25  main.<fn>

我想我显然误解了一些基本的东西。我已经尝试了这个测试的多种变体,async/awaitexpectAsynccompletion,但似乎没有任何效果。希望有任何好的建议。

【问题讨论】:

【参考方案1】:

我想你想要的是这样的:

  test("sends an ajax request and acknowledges a 200 response from the server", () async 
    await HttpRequest.postFormData("http://localhost:4567/errors",  'hello': 'world');

    print("hello!"); // or expect(x, y);
  );

【讨论】:

我已经按照您的建议进行了确切的更改,输出如下:pastie.org/10818961 看起来你的测试失败了。不幸的是,Http 错误并没有多大帮助。 是的,但为什么会失败?我的意思是,只有一行使用了 Dart 的 std lib 类 - HttpRequest 。它尝试连接的服务器清楚地接收到请求(我可以在日志中看到它)。这里实际上有 0 个我自己的代码。

以上是关于尝试测试异步 Dart ajax HttpRequest 时出错的主要内容,如果未能解决你的问题,请参考以下文章

Dart基础7-异步

如何防止在 dart 中使用 expectAsync 的单元测试进展?

FlutterHTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )

等待 Dart 异步函数完成

如何在Flutter / Dart中创建异步回调?

好或坏:在 Dart/Flutter 中声明主方法异步