【发布时间】:2021-08-15 04:25:49
【问题描述】:
我正在本地为 web 运行 Flutter 集成测试。这是一个集成测试示例,我唯一想做的就是按下按钮,ping https://google.com,然后在收到响应后完成。
当我在本地运行此集成测试时,我收到 XMLHttpRequest 错误。这可能是一个 CORS 错误,虽然我不确定是不是这样。
如何在集成测试中为不属于我的网站发出 HTTP 请求?
颤振版本:
Flutter 2.2.0 • channel stable • https://github.com/flutter/flutter.git
Framework • revision b22742018b (12 days ago) • 2021-05-14 19:12:57 -0700
Engine • revision a9d88a4d18
Tools • Dart 2.13.0
错误:
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞═════════════════
The following ClientException was thrown running a test:
XMLHttpRequest error.
When the exception was thrown, this was the stack:
dart-sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart 909:28 get current
...
【问题讨论】:
-
让我们假设错误是由 CORS 引起的 - 那实际上会很棒。因为这意味着集成测试模拟 真实 行为,而不是盲目地忽略 CORS 策略,这在真实浏览器上永远不会发生。 “如何从集成测试中向我不拥有的网站发出 HTTP 请求?” → 如果该服务器的 CORS 策略禁止您的请求,您为什么希望它在 web(使用 CORS 策略)集成测试中工作?
-
退后一步:我认为您应该从找出实际错误开始。我的第一个猜测不是 CORS,而是 HTTP 请求被
TestWidgetsFlutterBinding(故意)阻止的事实。您可以使用HttpOverrides覆盖它(请参阅github.com/creativecreatorormaybenot/funvas/blob/…)。如果您已经这样做了,我认为我们将不得不确定实际错误。如果是 CORS,则意味着您的请求有过错,因为您不被允许(根据政策)。 -
我尝试将 httpOverrides 设置为 null,但发生了同样的错误。顺便说一句,如果我在 Android 模拟器上运行完全相同的集成测试,它工作得很好。它可以向 Google 发出网络请求并获得响应。
-
我明白了,我认为您使用的是
integration_test而不是flutter_test。我会写一个答案:)
标签: flutter http testing cors flutter-web