如何修复由get_version插件引起的MissingPluginException(package_info)?

时间:2019-04-09 14:55:10

标签: testing plugins dart flutter

我有一个不稳定的应用程序,我正在编写一个测试用例,将应用程序的currentVersion与可用的LatestVersion进行比较。该函数仅获取currentVersion和LatestVersion的值,并根据currentVersion <= latestVersion是否返回true或false。

我正在使用get_version插件提取应用程序的currentVersion。 LatestVersion的值比用于测试目的的值大。

此调用在应用程序的其余部分中有效。它只会在测试用例中产生问题。

我尝试从0.0.8升级到0.1.0,但没有成功。

    void main() {
      test('checkAppVersion', () async {
        String currentVersion = await GetVersion.projectVersion;


expect(
    checkAppVersionTest(
        Version.parse(currentVersion), Version.parse(latestVersion)),
    true);


  });
}

    bool checkAppVersionTest(Version currentVersion, Version latestVersion) { bool updateRequired = false;
      if (currentVersion < latestVersion) {
        updateRequired = true;
      }
      return updateRequired;
    }

我遇到以下错误:

  

MissingPluginException(在通道plugins.flutter.io/package_info上未找到方法getAll的实现)   软件包:flutter / src / services / platform_channel.dart 300:7 MethodChannel.invokeMethod   =====异步间隙===========================   dart:async _AsyncAwaitCompleter.completeError   软件包:flutter / src / services / platform_channel.dart MethodChannel.invokeMethod   =====异步间隙===========================   dart:async _asyncThenWrapperHelper   软件包:flutter / src / services / platform_channel.dart MethodChannel.invokeMethod   package:package_info / package_info.dart 38:17 PackageInfo.fromPlatform

当我对currentVersion值进行硬编码时,效果很好。

请提出解决方法。

1 个答案:

答案 0 :(得分:0)

我假设您使用的是Android Studio或类似产品,然后单击“播放”按钮运行测试。 我尝试了这个,并得到了与您相同的结果。 但是,似乎该测试实际上并未通过单击此按钮在设备上运行-这是插件所必需的,因此通过从终端运行它并指定文件-似乎运行良好:

flutter run test.dart

您将需要在main()的第一行中添加以下内容,否则会出现其他错误:

TestWidgetsFlutterBinding.ensureInitialized();

最终代码:

import 'package:flutter_test/flutter_test.dart';
import 'package:get_version/get_version.dart';
import 'package:pub_semver/pub_semver.dart';

void main() {
  TestWidgetsFlutterBinding.ensureInitialized();

  test('checkAppVersion', () async {
    String currentVersion = await GetVersion.projectVersion;
    String latestVersion = '0.0.1';
    expect(checkAppVersionTest(Version.parse(currentVersion), Version.parse(latestVersion)), false);
  });
}

bool checkAppVersionTest(Version currentVersion, Version latestVersion) {
  bool updateRequired = false;
  if (currentVersion < latestVersion) {
    updateRequired = true;
  }
  return updateRequired;
}

如果在正常运行您的应用程序时遇到任何类似问题,请尝试终止您的应用程序并运行 flutter clean在终端中。