首页 > 解决方案 > 使用颤振小部件测试测试接收意图

问题描述

我有一个小的颤振应用程序,它在文本小部件中显示传入的共享操作,也就是意图。接收部分是这样的:

class MyAppState extends State<MyApp> {

  @override
  void initState() {

     ReceiveSharingIntent.getInitialText().then((String value) {
        if (value == null) return;
        print("got intent " + value);
        add_to_widget (value) ; 
     });

     ReceiveSharingIntent.getTextStream().listen((String value) {
        print("got intent " + value);
        add_to_widget (value) ; 
     });

}

当我在 android 虚拟设备上运行代码时,意图被正确收集并且文本显示在小部件中,所以我想我的 AndroidManifest.xml 正确:

<intent-filter>
  <action android:name="android.intent.action.MAIN"/>
  <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

<intent-filter>
  <action android:name="android.intent.action.SEND" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:mimeType="text/*" />
</intent-filter>

但我想用flutter_test中的小部件测试器自动测试它,如下所示:


void main() {
  testWidgets('receive intent ', (WidgetTester tester) async {
    await tester.pumpWidget(MyApp());

    // the missing bit
    await fire_share_action ('hello_intent') ; 


    expect (find.text('hello_intent'), findsOneWidget) ;
  });
}

如您所见,缺少的部分是 fire_share_action 的内容。我尝试触发类似https://pub.dev/packages/intent中的意图,但是,尽管没有任何错误或异常,但没有像我在 avd 中运行时那样打印意图,也没有期望通过。

我有一种我错过了什么的感觉。测试意图的接收应该是一件基本的事情,对吧?

我很确定将 android 代码放入fire_share_action(就像我所做的那样)是错误的方式,但是 - 我还能怎么做呢?如何从“testWidgets”内部向我的应用发送 Intent?还是我必须创建一个模拟接收器来进行三明治测试?我不想进入flutter_driver,也不想进入unit_test;小部件测试是我的方式,因为它们提供了快速周转和可靠性之间的中间立场。

我搞砸了几天的编码,非常沮丧。尽管有大量关于在 Flutter 应用程序中发送和接收 Intent 的文献,但我没有发现任何关于测试Intent接收的内容,更不用说测试发送Intent 了 ……

任何想法?

标签: androidfluttertestingandroid-intentflutter-test

解决方案


推荐阅读