在TextSpan中测试文本

S.D*_*.D. 7 dart flutter

如果我们有一个小部件TextSpan的子代,RichText您将如何测试文本内容.

new TextSpan(
  text: 'Hello world!',
  style: new TextStyle(color: Colors.black),
)
Run Code Online (Sandbox Code Playgroud)

在您的测试中,使用Text小部件,您可以使用expect(find.text('Hello world!'), findsOneWidget),但如果您有一个小部件,则不起作用TextSpan.

expect(find.byType(TextSpan), findsOneWidget)也找不到任何类型的小部件TextSpan.

Rém*_*let 7

That's not possible. As TextSpan doesn't actually render anything. It is data information used by another object to actually render something.

您可以做的是找到您将TextSpan. 然后验证它是否正确


小智 7

可以通过使用来实现byWidgetPredicate

expect(
    find.byWidgetPredicate((widget) =>
        widget is RichText &&
        widget.text.toPlainText() ==
            'Hello World!.'),
    findsOneWidget);
Run Code Online (Sandbox Code Playgroud)


sce*_*eee 6

除了 Rémi 的回答,这里是从RichText. 您将密钥设置为RichText,然后您可以执行以下操作:

Finder widgetFinder = find.byKey(key);

Finder rtFinder =
   find.descendant(of: widgetFinder, matching: find.byType(RichText));
RichText richText = rtFinder.evaluate().first.widget as RichText;
String richTextText = richText.text.toPlainText();

print('Text from Text widget: $richTextText');
expect(richTextText, 'This is my text',
   reason: 'Text from found text widget do not match');
Run Code Online (Sandbox Code Playgroud)