【问题标题】:Comparaing Two PinCode textfield in flutter test比较颤振测试中的两个 PinCode 文本字段
【发布时间】:2022-06-10 20:28:48
【问题描述】:

目前我工作的不是我使用此插件的项目:https://pub.dev/packages/pin_code_fields

所以我很困惑我们应该在什么级别测试小部件(小部件测试)。

  1. 使用 Key 来检查树中是否存在小部件,以便稍后根据 Type 期待它。
  2. 我已经在使用泵的测试中检查了一个输入的引脚并输入文本然后进行比较。
  3. 我有点困惑如何检查两个 PinCodeTextFields 并检查它们是否具有相似的代码。

谁能告诉在颤振测试中要考虑什么(在什么限制下停止)。 我正在添加一些示例代码,其中我已经涵盖了前两点。

void main() {
  Widget _wrapWithMaterialApp(Widget widget) => MaterialApp(home: Scaffold(
    body: widget,
  ));
  testWidgets('PinCode text field testing',  (WidgetTester tester) async {
    
    await tester.pumpWidget(_wrapWithMaterialApp(AppPinWidget(
        controller: TextEditingController())));

    var widget = find.byType(AppPinWidget);
    expect(widget, findsOneWidget);


    final textField = find.descendant(
      of: find.byType(PinCodeTextField),
      matching: find.byType(AnimatedContainer),
    );
    await tester.tap(textField.first);
    await tester.pump();
    await tester.enterText(find.byType(TextFormField).first, '3');
    await tester.pump();
    expect(find.text('3'), findsWidgets);
    await tester.pump(const Duration(milliseconds: 300));

    await tester.enterText(find.byType(TextFormField).first, '4');
    await tester.pump();
    expect(find.text('4'), findsWidgets);
    await tester.pump(const Duration(milliseconds: 300));
    await tester.enterText(find.byType(TextFormField).first, '5');
    await tester.pump();
    expect(find.text('5'), findsWidgets);
    await tester.pump(const Duration(milliseconds: 300));
    await tester.enterText(find.byType(TextFormField).first, '6');
    await tester.pump();
    expect(find.text('6'), findsWidgets);
    await tester.pump(const Duration(milliseconds: 300));
    expect(find.byType(PinCodeTextField), findsOneWidget);

  });
}

【问题讨论】:

  • pincode 只是自定义文本字段,您可以使用 textEditingController.text() 获取值并将其作为字符串进行比较

标签: android ios flutter flutter-test


【解决方案1】:

我不太明白问题出在哪里,但我将在此处留下一段代码,用于比较文本内容的相等性。并且有几种方法

expect(someTextWidget.data, equals(someOtherTextWidget.data));

expect(find.byWidgetPredicate((widget) =>
              widget is PinCodeTextField &&
              widget.data == 'expectedValue')),
          findsNWidgets(2)); // here 2 is how many widgets you should have with the same text

expect(someTextWidget.data,
          equals(someOtherTextWidget.data));

expect(pinTextFirstFieldKey.text, equals(pinTextSecondFieldKey.text)
//it is if you try to compare FormTextFields with assigned global keys of type GlobalKey<FormFieldState<String>>()

如果有不清楚的地方,请在 cmets 中说明 - 我会添加编辑。

【讨论】:

    猜你喜欢
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 2020-08-04
    • 1970-01-01
    • 2020-11-24
    • 2020-04-30
    相关资源
    最近更新 更多