gpt4 book ai didi

docker - 在docker镜像上运行的'flutter test'导致testfile.dill.track.dill更改,然后在CI环境上导致测试失败

转载 作者:行者123 更新时间:2023-12-02 19:52:20 24 4
gpt4 key购买 nike

我在gitlab-ci环境中正在运行flutter test的单元测试错误。以下是我为解决该问题已经完成但尚未找到解决方案的事情的完整列表。我已经在github/flutter中打开了一个问题,想知道它是否可能实际上是 flutter 朔迷离的错误,但是如果您有其他建议,将很高兴收到您的来信。如果此问题需要,所有日志都在GitHub问题中。

重现步骤

由于专有原因,我无法粘贴我所有的Flutter代码。我将尽可能详细地为您提供解决方案的帮助,并随时询问更多详细信息。

主要目标是让flutter test在docker镜像上的gitlab-ci上运行。因此,我在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镜像中 testfile.dill.track.dill引起的 flutter test更改而引起的。
  • 在macOS上运行flutter test(与Docker镜像共享同一项目目录)
  • 运行cp build/testfile.dill.track.dill ~保存文件
  • 的副本
  • 在docker vm上运行flutter test(第一次,测试成功运行,但是会更改测试file.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并在进一步的测试中再次失败
  • 最佳答案

    这是 flutter 软件包版本的问题。

    当您创建docker镜像并运行flutter pub get时,它将从头开始构建软件包,并因此通过较小的更新来升级某些软件包。

    这可能会导致本地镜像和docker镜像之间的版本不同。

    因此,请确保您在本地和dockerized相同的环境中运行测试。

    关于docker - 在docker镜像上运行的'flutter test'导致testfile.dill.track.dill更改,然后在CI环境上导致测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59884477/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com