Flutter:在小部件测试中测试异常
Posted
技术标签:
【中文标题】Flutter:在小部件测试中测试异常【英文标题】:Flutter: Testing for exceptions in widget tests 【发布时间】:2019-06-13 04:38:50 【问题描述】:在 Flutter 中进行小部件测试期间,如何确保 ui(小部件)抛出异常。这是我的代码不起作用:
expect(
() => tester.tap(find.byIcon(Icons.send)),
throwsA(const TypeMatcher<UnrecognizedTermException>()),
);
失败并出现以下错误
...
Expected: throws <Instance of 'TypeMatcher<UnrecognizedTermException>'>
Actual: <Closure: () => Future<void>>
Which: returned a Future that emitted <null>
或者......我是否应该通过查找错误消息等来测试 UI 如何处理异常?
【问题讨论】:
【参考方案1】:要捕获颤振测试中抛出的异常,请使用WidgetTester.takeException。这将返回框架捕获的最后一个异常。
await tester.tap(find.byIcon(Icons.send));
expect(tester.takeException(), isInstanceOf<UnrecognizedTermException>());
您也不需要throwsA
匹配器,因为它不会从方法中抛出。
【讨论】:
实际上expect(tester.takeException(), isInstanceOf<UnrecognizedTermException>());
工作得很好!谢谢
你让我想到:“...返回框架捕获的最后一个异常”。我宁愿让我的逻辑抓住它以获得更好的设计。这还是很有价值的。不接受 4 分钟后的答案
请注意,这并不适用于所有情况。在极少数情况下,您可能需要覆盖 FlutterError.onError
(并在之后恢复)。
该死!。我刚刚遇到了 FlutterError.onError 问题。将发布另一个问题
嘿,在异步上下文中引发的异常呢?我无法在测试中捕捉到它们。以上是关于Flutter:在小部件测试中测试异常的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flutter 小部件测试中执行缩放(捏缩放)多指手势?