Flutter小部件通过平台分支进行测试

时间:2019-03-19 04:51:39

标签: flutter

在小部件的代码中,我需要在Android / iOS上分支以显示特定于每个平台的小部件,并调用特定于平台的API(例如,Android小部件将调用仅适用于Android的API)。

  if (Platform.isAndroid) {
    return WidgetAndroid(...);
  } else if (Platform.isIOS) {
    return WidgetIOS(...);
  }

如何使用Flutter小部件测试来测试显示正确的小部件?

我知道我可以检查该小部件是否存在,但是如何在特定平台上运行测试。

expect(find.byType(WidgetIOS), findsOneWidget);

2 个答案:

答案 0 :(得分:1)

Platform.isAndroidPlatform.isIOS在运行false时均返回testWidgets

我们可以在测试中应用的一些建议:

  • 将平台作为变量传递给顶级小部件,这样您就可以手动提供该值。
  • 假设您要在没有else的情况下测试if,以便在测试期间运行。
  • 改为使用https://pub.dev/packages/platform中的Platform,该方法可以进行模拟,这可能是最好的长期解决方案。

答案 1 :(得分:0)

就像Miguel提到的那样,您不能直接嘲笑它。

如果使用provider框架,则可以在测试中使用依赖项注入来实现此目的,而无需在窗口小部件中暴露其他参数。

创建一个用于注入的类:

class PlatformInfo {
  final bool isIos;
  final bool isAndroid;

  PlatformInfo({@required this.isAndroid,@required  this.isIos});
}

在顶级MultiProvider小部件中,设置提供商绑定:

Provider<PlatformInfo>.value(
    value: PlatformInfo(isAndroid: Platform.isAndroid, isIos: Platform.isIOS),
),

在小部件中使用它:

Provider.of<PlatformInfo>(context).isIos