Flutter测试通过子文本查找

ulmd4ohb  于 2023-08-07  发布在  Flutter
关注(0)|答案(3)|浏览(103)

如果某个文本是作为完整字符串匹配或作为其他文本的子字符串找到的,是否可以Assert测试?
我希望下面的测试通过,只要字符串Foo在任何地方都能找到,即使是作为其他字符串的子字符串。我该改什么?

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
  testWidgets('Find sub text', (WidgetTester tester) async {
    await tester.pumpWidget(Text('Error code is Foo', textDirection: TextDirection.ltr));
    expect(find.text('Error code is Foo'), findsOneWidget);
    expect(find.text('Foo'), findsOneWidget);
  });
}

字符串
到目前为止:

The following TestFailure object was thrown running a test:
  Expected: exactly one matching node in the widget tree
  Actual: _TextFinder:<zero widgets with text "Foo" (ignoring offstage widgets)>
   Which: means none were found but one was expected

m0rkklqb

m0rkklqb1#

可以使用find.textContaining

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
  testWidgets('Find sub text', (WidgetTester tester) async {
    await tester.pumpWidget(Text('Error code is Foo', textDirection: TextDirection.ltr));
    expect(find.text('Error code is Foo'), findsOneWidget);
    expect(find.textContaining('Foo'), findsOneWidget);
  });
}

字符串

brtdzjyr

brtdzjyr2#

替换:

expect(find.text('Foo'), findsOneWidget);

字符串
与:

expect(find.byWidgetPredicate((widget) {
  if (widget is Text) {
    final Text textWidget = widget;
    if (textWidget.data != null) return textWidget.data.contains('Foo');
    return textWidget.textSpan.toPlainText().contains('Foo');
  }
  return false;
}), findsOneWidget);


您将首先找到文本小部件,然后检查文本字符串中的子字符串

rjee0c15

rjee0c153#

您可以使用find.textContaining查找包含您要查找的字符串的文本小部件。
此方法有一个名为findRichText的属性,默认值为false,因此如果您要查找的文本位于RichText或TextSpan小部件中,则需要将其设置为true:

expect(find.textContaining('Error code is Foo', findRichText: true), findsOneWidget);

字符串

相关问题