MH *_*son 10 dart flutter flutter-test
在我的颤振代码中,我有执行此操作的逻辑:
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,则第一个运行的测试将挂起。
那么我嘲笑这种行为是错误的吗?还是我没有正确清理它?
我遇到了同样的问题,并相信这是由于捆绑包的缓存造成的。这将导致上述测试失败,因为消息永远不会发送。调用loadString时,可以指定是否缓存结果。例如:
rootBundle.loadString('AssetManifest.json', cache: false)
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用loadStructuredData,实现可以缓存结果,并且您不能告诉它不这样做。
| 归档时间: |
|
| 查看次数: |
1717 次 |
| 最近记录: |