在自定义复选框上进行Flutter小部件测试

3

我有一个自定义的复选框,如下所示:

   FeedbackCheckBox(
      title: 'Test',
      onChanged: (value) {
        setState(
          () {
            isNeedComeBack = value;
          },
        );
      },
    )

以下是实现方式:

class FeedbackCheckBox extends HookWidget {
  const FeedbackCheckBox({
    Key? key,
    required this.title,
    required this.onChanged,
    this.textStyle,
    this.padding,
  }) : super(key: key);

  final String title;
  final TextStyle? textStyle;
  final ValueChanged<bool> onChanged;
  final EdgeInsets? padding;
  @override
  Widget build(BuildContext context) {
    final isNeedComeBack = useState<bool>(false);

    return Padding(
      padding: padding ?? const EdgeInsets.only(top: 12),
      child: CustomCheckbox(
        value: isNeedComeBack.value,
        label: title,
        onTap: () {
          isNeedComeBack.value = !isNeedComeBack.value;
          onChanged(isNeedComeBack.value);
        },
      ),
    );
  }
}

现在我想为它编写一个小部件测试。当点击CustomCheckbox时,我想要确保onChanged:(value)接收到正确的值。

这是我的测试:

testWidgets("FeedbackCheckBox widget onChanged works",
    (WidgetTester tester) async {
  bool clicked = false;
  _onTap(v) => clicked = v;

  var mockWidget = FeedbackCheckBox(title: "hhh", onChanged: _onTap);
  final mockCustomCheckboxWidget =
      CustomCheckbox(value: false, onTap: () {});
  await tester.pumpWidget(withMaterialApp(child: mockWidget));
  var customCheckBox =
      tester.firstWidget(find.byWidget(mockCustomCheckboxWidget));
  // await tester.tap(inkWellFinder);
  // await tester.pumpAndSettle();
  // expect(clicked, true);
});

我找到了customCheckBox,但如何触发onTap并在FeedbackCheckBox onChanged中接收值?
1个回答

1

我解决了这个问题,这是新的测试:

    testWidgets("FeedbackCheckBox widget onChanged works",
        (WidgetTester tester) async {
      bool clicked = true;
      _onTap(v) {
        return clicked = v;
      }

      var mockWidget = FeedbackCheckBox(title: "hhh", onChanged: _onTap);
      await tester.pumpWidget(withMaterialApp(child: mockWidget));
      await tester.tap(find.byType(CustomCheckbox));
      await tester.tap(find.byType(CustomCheckbox));
      expect(clicked, false);
    });
  });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接