小编MH *_*son的帖子

Flutter 如何模拟对 rootBundle.loadString(...) 的调用,然后重置模拟行为?

在我的颤振代码中,我有执行此操作的逻辑:

final jsonString = await rootBundle.loadString('AssetManifest.json');
Run Code Online (Sandbox Code Playgroud)

AssetManifest.json我有一些测试,当到达这条线时我想返回一个假的。

为了模拟它,我在测试中这样做:

ServicesBinding.instance.defaultBinaryMessenger
    .setMockMessageHandler('flutter/assets', (message) {
  final Uint8List encoded =
      utf8.encoder.convert('{"Foo.ttf":["Foo.ttf"]}');
  return Future.value(encoded.buffer.asByteData());
});
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这有效,但是在它之后运行的任何测试都会挂起(当它到达该行时,它们都会卡在代码中await rootBundle.loadString('AssetManifest.json')。

我尝试过添加

ServicesBinding.instance.defaultBinaryMessenger
    .setMockMessageHandler('flutter/assets', null);
Run Code Online (Sandbox Code Playgroud)

但这似乎并没有正确地“清理”被嘲笑的行为。事实上,如果我在 my 中运行上述行setUp,则第一个运行的测试将挂起。

那么我嘲笑这种行为是错误的吗?还是我没有正确清理它?

dart flutter flutter-test

10
推荐指数
1
解决办法
1717
查看次数

标签 统计

dart ×1

flutter ×1

flutter-test ×1