【发布时间】:2020-05-10 01:47:21
【问题描述】:
我在 gitlab-ci 环境中运行 flutter test 时遇到单元测试错误。以下是我已经尝试解决问题但尚未找到解决方案的完整列表。我在github/flutter 中打开了一个问题,想知道它是否真的是颤振中的一个错误,但如果有任何其他建议,我很高兴收到您的来信。如果此问题需要,所有日志都在 GitHub 问题中。
复制步骤
由于专有原因,我无法粘贴所有颤振代码。我会尽可能详细地帮助解决方案,并随时询问更多详细信息。
主要目标是让flutter test 在 gitlab-ci 上运行,在 docker 映像上。因此,我在我的 MacBook 上创建了一个本地 docker 镜像(Dockerfile 包含在下面,并且也被推送到了 Docker Hub)来重现和调试故障。
- 运行
docker pull isorensen/flutter-ubuntu:1.12.13-stable - 运行
docker run -v [flutter_project_root_directory]:/app -it --rm isorensen/flutter-ubuntu:1.12.13-stable - 在 Docker 映像上运行
flutter test。至少运行两次,因为如下所示,第一个命令可能会成功,实际上会导致进一步的测试失败。
预期结果:
00:09 +14: All tests passed!
实际结果:
00:12 +0 -1: faq: check if has values [E]
type 'MappedListIterable<MapEntry<int, dynamic>, dynamic>' is not a subtype of type 'List<dynamic>' in type cast
package:credifit/API/client.dart 307:80 ApiClient.getFaqs
00:12 +0 -2: faq: check first default question [E]
type 'MappedListIterable<MapEntry<int, dynamic>, dynamic>' is not a subtype of type 'List<dynamic>' in type cast
package:credifit/API/client.dart 307:80 ApiClient.getFaqs
00:18 +10 -3: getUserLoanInfos [E]
Instance of 'Fatal'
package:sdkgen_runtime/http_client.dart 30:5 SdkgenHttpClient._throwError
package:sdkgen_runtime/http_client.dart 82:15 SdkgenHttpClient.makeRequest
00:19 +10 -4: simulateInstallments [E]
type 'MappedListIterable<MapEntry<int, dynamic>, dynamic>' is not a subtype of type 'List<dynamic>' in type cast
package:credifit/API/client.dart 313:236 ApiClient.simulateInstallments
00:19 +10 -4: Some tests failed.
似乎是什么问题
由于在我的本地环境(运行 macOS Catalina,如下面的日志中详述)没有出现此问题,我注意到,在我的项目文件夹中运行 fswatch 并在两个环境中运行 flutter test(共享同一个项目目录),只有两个文件被“触及”(不一定改变):
- .packages
- .testfile.dill.track.dill
在两个文件上运行diff 之后,在flutter test 之前和之后,发现只有testfile.dill.track.dill 发生了变化。
最后,当我执行以下序列时,它使flutter test 成功运行,得出的结论是,错误是由于 docker 映像中的flutter test 更改了testfile.dill.track.dill 引起的。
- 在 macOS 上运行
flutter test(与 docker 镜像共享同一个项目目录) - 运行
cp build/testfile.dill.track.dill ~保存文件副本 - 在 docker vm 上运行
flutter test(第一次,测试运行成功,但改变了测试文件.dill.track.dill) - 运行
diff build/testfile.dill.track.dill ~/testfile.dill.track.dill
结果:Binary files build/testfile.dill.track.dill and /Users/eduardosorensen/testfile.dill.track.dill differ - 在 docker vm 上运行
flutter test
上面的测试失败了 - 运行
cp ~/testfile.dill.track.dill build/testfile.dill.track.dill(恢复更改的文件) - 在 docker vm 上运行
flutter test
上面的测试成功了,尽管它再次更改了 testfile.dill.track.dill 并在进一步的测试中再次开始失败
【问题讨论】:
标签: docker flutter dart continuous-integration flutter-test