我在 flutter 中遇到了附加的小部件测试问题。当我单独运行测试时,每个测试都成功了;但是,当我运行整个 main() 方法时,前三个测试成功,但后两个测试失败,并出现以下异常:
Expected: exactly one matching node in the widget tree
Actual: ?:<zero widgets with type "SuccessDialog" (ignoring offstage widgets)>
Run Code Online (Sandbox Code Playgroud)
我知道异常意味着我期望的小部件不存在 - 我不明白为什么测试在单独运行时成功但在其他测试后运行后失败。每次测试后是否需要“重置”某些实例?
我试过插入“final SemanticsHandle handle = tester.ensureSemantics();” 在每个测试和“handle.dispose();”开始时 在每次测试结束时,但得到相同的结果。
编辑: 经过进一步调查后,问题似乎出在我如何使用flutter_bloc包管理 bloc 实例上。我已经改变了我的测试,为每个测试创建一个新的 testWidget 实例,但我仍然遇到同样的问题。有什么我可能会遗漏的东西会导致 bloc 实例在 testWidget 对象中持续存在吗?
我的新测试代码如下所示:
main() {
MvnoMockClient.init();
testWidgets(
'Voucher Redemption: Tapping redeem when no values were entered yields 2 field errors',
(WidgetTester tester) async {
Widget testWidget = MediaQuery(
data: MediaQueryData(),
child: MaterialApp(
home: VoucherRedemptionPage(onSuccess: () {}, onFail: …Run Code Online (Sandbox Code Playgroud)